Mail Pilot 3 0 – Task Oriented Email Client Access

broken image


OpenEmbedded welcomes contributions. Before submitting a patch however there are a few things to keep in mind.

  • The dominant business email strategies in place today include standard (Internet or in-house Apache) email hosting, Exchange hosting or running an in-house Exchange server. The best approach for migration varies among those strategies; in some cases, it may mean migrating separate groups of email users in different ways with different tools.
  • Take a trip into an upgraded, more organized inbox. Sign in and start exploring all the free, organizational tools for your email. Check out new themes, send GIFs, find every photo you've ever sent or received, and search your account faster than ever.
  • 2A task-oriented guide to creating a patch
    • 2.4Sending patches
  • 4Appendix

Finding the right place for your patch

OpenEmbedded is now split up into separate layers: OpenEmbedded-Core (OE-Core) which is a small set of core recipes, and other layers for recipes beyond that. For most layers, patches are sent to a mailing list for review before being merged. For further information specific to the layer you're working on, please see the README file in the layer.

New recipes in particular should be added to the appropriate layer. See the layer index for the list of public layers. If your new recipe doesn't seem to fit anywhere it can be added to the meta-oe layer in the meta-openembedded repository, although if it is likely to be followed by numbers of similar recipes then you may wish to consider creating a new layer.

XSLT 1.0 command line processor adep: xmlto XML-to-any converter adep: docbook-xsl stylesheets for processing DocBook XML to various output formats adep: glib-networking network-related giomodules for GLib adep: openssh-client secure shell (SSH) client, for secure access to remote machines adep: python3.

A task-oriented guide to creating a patch

Let's say you have made a fix to a recipe, you've tested that it works and you'd like to submit it for merging.

Set up git

Properly configuring git (using tekkub@gmail.com as an example user)

On Debian / Ubuntu (Note: Fedora uses `yum` OpenSuse uses zypper or yast)

These are important to the commit meta-data

Any Google Apps account

You can use the --envelope-sender option to have the email appear from the address you are subscribed to the list with. You will need to use the Accounts and import tab under the gmail settings tab. Use the Send mail as selection to address you want to send email from.

Subscribe to the mailing list

You need to subscribe to the appropriate mailing-list in order to be able to send your patch(es) there; for patches against OE-Core the mailing list is openembedded-core@lists.openembedded.org and for patches against meta-oe and many other layers the list is openembedded-devel@lists.openembedded.org. See Mailing lists for subscription and further details.

Committing your patch

Commit with a concise and descriptive message - one that explains your changes in a way others get a short overview without looking at the code.

All commit messages must include Signed-off-by (-s option to commit as above). For more guidelines on messages please see Commit Patch Message Guidelines.

Note that when adding multiple new recipes, each recipe should be added in a separate commit. For upgrades of existing recipes, the previous version should usually be deleted as part of the same commit to add the upgraded version.

Sending patches

There are two possible methods for submitting patches. Either one is acceptable; for a series containing a number of patches the pull request method is preferred although not mandatory.

Sending using git-send-email

To send just the top commit on your current branch (substitute mailing list address as appropriate):

For multiple commits you can substitute -1 above with -N (where N is the number of commits) or instead specify a revision before which to start e.g. HEAD~3, master etc.

Note: in either case if you are submitting a patch for meta-oe or any layer other than OE-Core, please add the appropriate prefix so that it is clear which layer the patch is intended to be applied to:

Please substitute 'PATCH' with 'PATCH v2' if you are submitting a revised version after addressing feedback (or v3, v4 etc.)

Sending via a pull request

Alternatively, for larger patch series it is preferable to send a pull request which not only includes the patch but also a pointer to a branch that can be pulled from. This involves making a local branch for your changes, pushing this branch to an accessible repository and then using the create-pull-request and send-pull-request scripts (supplied with OE-Core) to create and send a patch series with a link to the branch for review. Step-by-step instructions:

  1. Find a repository to push your changes to, and add this as a remote to your git working tree. If you're going to be submitting a lot of changes, some of the repositories have a corresponding -contrib repository which you can use for this purpose - access to these for OE-related work is open to anyone who requests it. Otherwise github or some other public git hosting service can suffice.
  2. Create a branch for your changes if you haven't already. Other than backports from master or fixing bugs that only occur in an older branch, this should be on top of the master branch.
  3. Push the branch to the remote.
  4. Run scripts/create-pull-request -u remote-name (where remote-name is the name of the remote where you'll be pushing the branch). For meta-oe and other layers where a single mailing list covers more than one layer you'll need to add -p 'layername][PATCH' replacing layername with the name of the layer so that it is clear which layer the patches are intended for.
  5. The script will report that it has created a pull-XXXXX directory has been created. Edit the pull-XXXXX/0000-cover-letter.patch with your favourite text editor and change the title and top of the body as appropriate.
  6. Run scripts/send-pull-request -p pull-XXXXX -t openembedded-core@lists.openembedded.org (replacing openembedded-core@lists.openembedded.org with the appropriate mailing list address for layers other than OE-Core). Where there is a clear maintainer for the area you're changing it may also help to add -C maintainer@example.com.


Backporting fixes to stable releases

When a bug is present on a stable branch of OE yet has been fixed in master one can request that the stable branch's maintainer accept the fix into the stable branch.The best way to do this is generate a patch with the backport and submit it to the openembedded-core@lists.openembedded.org mailing list (CC'ing the maintainer may help the patch be reviewed for inclusion more quickly).

Patches for stable branches should be prefixed with the branch name (which is the same as the release series name), for example morty, pyro, etc.Once you've identified the commit hash of the patch you'd like to see accepted as a backport you can generate the patch with:

The generated patch can then be sent using the procedure described above.

Community review

Your patch will be sent to the mailing list and for some layers should be immediately visible on http://patches.openembedded.org/

If you get feedback in reply to your patch, you should make changes according to the feedback and submit the next version. Please remember to use --subject-prefix='PATCH v2', v3, v4 etc. to mark the patch iteration. Please also test your revised changes - in particular don't just edit the patch file written out by git-format-patch and resend it.

If your patch has not had any feedback after a few days it may have been missed or the appropriate reviewers may not currently be around; it is perfectly fine to reply to it yourself with a 'ping' / reminder request for feedback. NOTE: patch review for feature / recipe upgrade patches will likely be delayed during a feature freeze because these types of patches aren't merged during this time - you may have to wait until after the freeze is lifted.

Appendix

Steps for people which don't have SMTP access for git

Patches should not be sent as attachment but inline.

If you do not have SMTP access to your email account you have two options:

1. Use a different account (e.g. gmail). you can make one especially for this. Note that the account may differ from the one in signed-off (although that is inconvenient)

2. Just include the patch in the body of your email. Make sure you use an email client that does not touch the message (turn spaces in tabs,wrap lines etc etc).

A good mail client to do so is pine (or alpine) or mutt. For more information refer to Documentation/email-clients.txt in linux kernel sources.

Streamlining git-send-email with configuration

Don't want to have to remember to specify the right options when using git-send-email (or the pull request script)? You can actually set these in git's configuration and save yourself a lot of hassle.

  • Always confirm sending (for all repositories):
  • Set send-to email address for the repository (don't forget to specify the right address!):
  • If the mailing list requires a subject prefix for the layer (only works when the repository only contains one layer; set layer name as appropriate):

See also

Retrieved from 'https://www.openembedded.org/index.php?title=How_to_submit_a_patch_to_OpenEmbedded&oldid=9615'
  • Python Basic Tutorial
  • Python Advanced Tutorial
  • Python Useful Resources
  • Selected Reading

Python provides two levels of access to network services. At a low level, you can access the basic socket support in the underlying operating system, which allows you to implement clients and servers for both connection-oriented and connectionless protocols.

Python also has libraries that provide higher-level access to specific application-level network protocols, such as FTP, HTTP, and so on.

This chapter gives you understanding on most famous concept in Networking - Socket Programming.

What is Sockets?

Sockets are the endpoints of a bidirectional communications channel. Sockets may communicate within a process, between processes on the same machine, or between processes on different continents.

Sockets may be implemented over a number of different channel types: Unix domain sockets, TCP, UDP, and so on. The socket library provides specific classes for handling the common transports as well as a generic interface for handling the rest.

Sockets have their own vocabulary −

Sr.No.Term & Description
1

Domain

The family of protocols that is used as the transport mechanism. These values are constants such as AF_INET, PF_INET, PF_UNIX, PF_X25, and so on.

2

type

The type of communications between the two endpoints, typically SOCK_STREAM for connection-oriented protocols and SOCK_DGRAM for connectionless protocols.

3

protocol

Typically zero, this may be used to identify a variant of a protocol within a domain and type.

4

hostname

The identifier of a network interface −

  • A string, which can be a host name, a dotted-quad address, or an IPV6 address in colon (and possibly dot) notation

  • A string '', which specifies an INADDR_BROADCAST address.

  • A zero-length string, which specifies INADDR_ANY, or

  • An Integer, interpreted as a binary address in host byte order.

5

port

Each server listens for clients calling on one or more ports. A port may be a Fixnum port number, a string containing a port number, or the name of a service.

The socket Module

To create a socket, you must use the socket.socket() function available in socket module, which has the general syntax −

Here is the description of the parameters −

  • socket_family − This is either AF_UNIX or AF_INET, as explained earlier.

  • socket_type − This is either SOCK_STREAM or SOCK_DGRAM.

  • protocol − This is usually left out, defaulting to 0.

Once you have socket object, then you can use required functions to create your client or server program. Following is the list of functions required −

Mail Pilot 3 0 – Task Oriented Email Client Access Login

Server Socket Methods

Sr.No.Method & Description
1

s.bind()

This method binds address (hostname, port number pair) to socket.

2

s.listen()

This method sets up and start TCP listener.

3

s.accept()

This passively accept TCP client connection, waiting until connection arrives (blocking).

Client Socket Methods

Sr.No.Method & Description
1

s.connect()

This method actively initiates TCP server connection.

General Socket Methods

Sr.No.Method & Description
1

s.recv()

This method receives TCP message

2

s.send()

This method transmits TCP message

3

s.recvfrom()

This method receives UDP message

4

s.sendto()

This method transmits UDP message

5

s.close()

This method closes socket

6

socket.gethostname()

Returns the hostname.

A Simple Server

To write Internet servers, we use the socket function available in socket module to create a socket object. A socket object is then used to call other functions to setup a socket server.

Mail Pilot 3 0 – Task Oriented Email Client Access

Now call bind(hostname, port) function to specify a port for your service on the given host.

Next, call the accept method of the returned object. This method waits until a client connects to the port you specified, and then returns a connection object that represents the connection to that client.

A Simple Client

Let us write a very simple client program which opens a connection to a given port 12345 and given host. This is very simple to create a socket client using Python's socket module function.

The socket.connect(hosname, port ) opens a TCP connection to hostname on the port. Once you have a socket open, you can read from it like any IO object. When done, remember to close it, as you would close a file.

The following code is a very simple client that connects to a given host and port, reads any available data from the socket, and then exits −

Mail Pilot 3 0 – Task Oriented Email Client Access Portal

Now run this server.py in background and then run above client.py to see the result.

Mail Pilot 3 0 – Task Oriented Email Client Access Server

This would produce following result −

Python Internet modules

A list of some important modules in Python Network/Internet programming.

Pilot

Now call bind(hostname, port) function to specify a port for your service on the given host.

Next, call the accept method of the returned object. This method waits until a client connects to the port you specified, and then returns a connection object that represents the connection to that client.

A Simple Client

Let us write a very simple client program which opens a connection to a given port 12345 and given host. This is very simple to create a socket client using Python's socket module function.

The socket.connect(hosname, port ) opens a TCP connection to hostname on the port. Once you have a socket open, you can read from it like any IO object. When done, remember to close it, as you would close a file.

The following code is a very simple client that connects to a given host and port, reads any available data from the socket, and then exits −

Mail Pilot 3 0 – Task Oriented Email Client Access Portal

Now run this server.py in background and then run above client.py to see the result.

Mail Pilot 3 0 – Task Oriented Email Client Access Server

This would produce following result −

Python Internet modules

A list of some important modules in Python Network/Internet programming.

Mail Pilot 3 0 – Task Oriented Email Client Access Download

ProtocolCommon functionPort NoPython module
HTTPWeb pages80httplib, urllib, xmlrpclib
NNTPUsenet news119nntplib
FTPFile transfers20ftplib, urllib
SMTPSending email25smtplib
POP3Fetching email110poplib
IMAP4Fetching email143imaplib
TelnetCommand lines23telnetlib
GopherDocument transfers70gopherlib, urllib

Please check all the libraries mentioned above to work with FTP, SMTP, POP, and IMAP protocols.

Further Readings

This was a quick start with Socket Programming. It is a vast subject. It is recommended to go through the following link to find more detail −

Mail Pilot 3 0 – Task Oriented Email Client Access

  • Unix Socket Programming.

  • Python Socket Library and Modules.





broken image