Spinning Topp Logo BlackTopp Studios
inc
networkenumerations.h
1 // © Copyright 2010 - 2014 BlackTopp Studios Inc.
2 /* This file is part of The Mezzanine Engine.
3 
4  The Mezzanine Engine is free software: you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation, either version 3 of the License, or
7  (at your option) any later version.
8 
9  The Mezzanine Engine is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with The Mezzanine Engine. If not, see <http://www.gnu.org/licenses/>.
16 */
17 /* The original authors have included a copy of the license specified above in the
18  'Docs' folder. See 'gpl.txt'
19 */
20 /* We welcome the use of the Mezzanine engine to anyone, including companies who wish to
21  Build professional software and charge for their product.
22 
23  However there are some practical restrictions, so if your project involves
24  any of the following you should contact us and we will try to work something
25  out:
26  - DRM or Copy Protection of any kind(except Copyrights)
27  - Software Patents You Do Not Wish to Freely License
28  - Any Kind of Linking to Non-GPL licensed Works
29  - Are Currently In Violation of Another Copyright Holder's GPL License
30  - If You want to change our code and not add a few hundred MB of stuff to
31  your distribution
32 
33  These and other limitations could cause serious legal problems if you ignore
34  them, so it is best to simply contact us or the Free Software Foundation, if
35  you have any questions.
36 
37  Joseph Toppi - toppij@gmail.com
38  John Blackwood - makoenergy02@gmail.com
39 */
40 
41 #ifndef _networkenumerations_h
42 #define _networkenumerations_h
43 
44 namespace Mezzanine
45 {
46  namespace Network
47  {
48  /// @brief This is an enum listing for protocols used and recognized by software.
50  {
51  HLP_Invalid = 0, ///< Used for error conditions.
52  HLP_FTP = 1, ///< File Transfer Protocol.
53  HLP_FTPS = 2, ///< File Transfer Protocol Secure.
54  HLP_HTTP = 4, ///< Hyper-Text Transfer Protocol.
55  HLP_HTTPS = 8, ///< Hyper-Text Transfer Protocol Secure.
56  HLP_SMTP = 16 ///< Simple Mail Transfer Protocol.
57  };
58 
59  /// @brief This enum is a listing of the commands that can be issued to an FTP server.
60  /// @details This is a complete listing of the commands listed for the FTP standard in RFCs 959, 1639, 2228, 2389, 2428, 2640, 7151, and
61  /// 3659. Some commands expect arguments, some do not. FTP connections must start with the command connection, from the client to the
62  /// server. Once established, the client needs to authenticate with the server using a login. In most cases using an "anonymous" account
63  /// is sufficient. Once authenticated some information for the data connection is needed. FTP can operate in active or passive mode. In
64  /// active mode you would send a PORT command providing the IP address and Port number to connect to for the data transfer. Due to NATs
65  /// and Proxies however this is rarely used, instead opting for passive mode. In passive mode you send a PASV command. The server will
66  /// then respond with an IP address and Port number on which it is listening and will expect an incoming connection. Once the data
67  /// connection is established actual transfers can take place.
69  {
70  FCL_Invalid = 0, ///< Not an actual command. Used for error conditions.
71  // Access Control Commands
72  FCL_ACCT = 1, ///< Account. Identifies the users account. While similar sounding to the USER command, some servers differentiate the two when determining access.
73  FCL_CDUP, ///< Change to Parent Directory. Changes the directory for file/folder operations to the parent of the current directory.
74  FCL_CWD, ///< Change Working Directory. Changes the current directory for file/folder operations.
75  FCL_HOST, ///< Host. Similar to HTTP Host header, allows an FTP client to provide an FTP URI Authority to specify a sub-server(virtual machine, for example) to be directed to.
76  FCL_PASS, ///< Password. The users password for authentication.
77  FCL_QUIT, ///< Logout. Logs out of the FTP server and closes all connections. Pending transfers are allowed to finish and be responded to first.
78  FCL_REIN, ///< Reinitialize. Sets the connection back to a starting state. User is logged out but the command connection is preserved.
79  FCL_SMNT, ///< Structure Mount. Allows the user to mount a file system data structure without requiring the connection to be restarted. See FTPStructureMount enum.
80  FCL_USER, ///< User Name. The user name to be used for authentication to the FTP server. In most cases the user name provided can/will be "anonymous".
81  // Transfer Parameter Commands
82  FCL_EPRT, ///< Extended Port. This is similar to LPRT, but with friendlier syntax. Takes a "|" delimited String starting with 1(IPv4) or 2(IPv6), then the printable address, then the printable port number.
83  FCL_EPSV, ///< Extended Passive. This is similar to LPSV, but with friendlier syntax. The format is identical to the EPRT command.
84  FCL_MODE, ///< Transfer Mode. Sets how the data will be transferred from the source to destination. See FTPTransferMode enum.
85  FCL_PASV, ///< Passive. Requests the server go into passive mode for the connection. Going into passive mode tells the server to expect an incoming connection from the client, instead of creating one itself. Format is expressed the same way as the PORT command.
86  FCL_PORT, ///< Data Port. Specifies the IP/Port on which to establish the data connection. Expressed in 6 comma separated sections of values 0-255. First four are IP address, last two are the port bits.
87  FCL_STRU, ///< File Structure. Specifies the structure being transferred. Will almost never need to be used as the default is for files. Can also be set to Record or Page structure. See FTPStructureMount enum.
88  FCL_TYPE, ///< Data Type. Sets the type of data requested the file be in for downloads or the type of data that the file being uploaded is in, depending on the operation. See FTPDataType enum.
89  // Data Connection Opening Commands
90  FCL_APPE, ///< Append. Appends the contents of the transfer to an existing file at the destination. If the file does not exist it will be created.
91  FCL_DELE, ///< Delete. Deletes the file specified in the argument.
92  FCL_LIST, ///< List. Gets information on the current directory. Either files or directories other than the current one may be specified, in which case it will return information on the specified file/directory. Format is undefined.
93  FCL_NLST, ///< Name List. Same as the LIST command, but only specifying names so as to make it easier to parse for machine parsing.
94  FCL_RETR, ///< Retrieve. Downloads a file from the server, expecting a filename at the source as the argument.
95  FCL_STOR, ///< Store. Uploads a file to the server, expecting a filename to be given to the file at the destination as the argument.
96  FCL_STOU, ///< Store Unique. This is the same as STOR (Store), but forces the name of the file at the destination to be unique.
97  // Other FTP Service Commands
98  FCL_ABOR, ///< Abort. Aborts the currently active file transfer.
99  FCL_ALLO, ///< Allocate. Requests the server allocate space for a file in advance. Many servers don't require this. Expects a decimal number expressing the size to allocate as the argument.
100  FCL_FEAT, ///< Features. Requests a listing of the available features/extensions on the server. No argument needed. Format defined in RFC 2389.
101  FCL_HELP, ///< Help. Another command may be specified as an argument to get details on it's implementation status on the server. If no argument is specified then it should return a listing of supported commands.
102  FCL_LANG, ///< Language. Requests the server change it's response message language to a different language. Use the FEAT command to determine supported languages.
103  FCL_MDTM, ///< Modification Time. Gets the time a file was last modified. Argument should be a file name. The format for the time returned in the response is "YYYYMMDDHHMMSS" with an optional dot separated fraction of a second.
104  FCL_MKD, ///< Make Directory. Creates a new directory on the server with the name provided in the argument.
105  FCL_MLSD, ///< Machine List Directory. Gets a machine friendly listing of all the files in the specified directory. If no directory is specified the current directory is used. The format is defined in RFC 3659, section 7.2.
106  FCL_MLST, ///< Machine List. Gets a machine friendly listing of information on the specified file. The format is defined in RFC 3659, section 7.2.
107  FCL_NOOP, ///< No Operation. This command does nothing and asks the server to do nothing but send a basic response. Used to keep connections alive and not timeout.
108  FCL_OPTS, ///< Options. Enables command specific options for the next command issued. Argument must be the command name followed by the options to be applied, separated by a space.
109  FCL_PWD, ///< Print Working Directory. Requests the pathname of the current directory for FTP operations.
110  FCL_REST, ///< Restart. The point where the file transfer is to begin. For files, the argument should an integer representing the byte position where the transfer should start.
111  FCL_RMD, ///< Remove Directory. Deletes the directory (and all files under it) specified in the argument from the server.
112  FCL_RNFR, ///< Rename From. The pathname of the file to be renamed. This simple selects the file the operation is to be performed on. Must be followed by a RNTO command.
113  FCL_RNTO, ///< Rename To. The new pathname of the file being renamed. This command must be preceded by a RNFR command to select which file should be renamed.
114  FCL_SITE, ///< Site. Executes a command that is not in the standard specific to the connected server. The argument is the command to be executed.
115  FCL_SIZE, ///< File Size. Gets the size of a specified file. Argument is a file and the response will contain the size in bytes it would be if it were transferred. The actual value can change based on the TYPE setting.
116  FCL_STAT, ///< Status. Requests the current status of the FTP server or the current executing FTP operation on the server. If a file is specified as an argument then it can act like LIST.
117  FCL_SYST, ///< System. Requests an identifier for the type of system the server is operating on as well as the default transfer mode used by the server.
118  // Security Commands
119  FCL_ADAT, ///< Authentication/Security Data. A String of Base64 encoded data necessary to complete the authentication/verify the user.
120  FCL_AUTH, ///< Authentication/Security Mechanism. Declares the desired means of protection on the FTP connection(s), such as "TLS" or "SSL".
121  FCL_CCC, ///< Clear Command Channel. Clears the command stream of protected status, reverting to plain-text transmissions. Useful if AUTH is used just to verify identity.
122  FCL_CONF, ///< Confidentiality Protected Command. Generic command for allowing the configuration of confidentiality settings on the specified security mechanism. Not used with SSL/TLS.
123  FCL_ENC, ///< Privacy Protected Command. Generic command for allowing the configuration of privacy settings on the specified security mechanism. Not used with SSL/TLS.
124  FCL_MIC, ///< Integrity Protected Command. Generic command for allowing the configuration of integrity settings on the specified security mechanism. Not used with SSL/TLS.
125  FCL_PBSZ, ///< Protection BufferSize. Sets the maximum size (in bytes, max of 32-bit UInt) of the encoded blocks to be sent over the command channel. Must occur after an AUTH command and before a PROT command.
126  FCL_PROT, ///< Data Channel Protection Level. Sets the security to be used on the data channel. See FTPSecurityLevel enum.
127  // Obsolete/Alias Commands
128  FCL_LPRT, ///< Long Port. Obsolete command. Similar to the PORT command, but permits larger addresses. The format is comma separated bytes. Starts with an address family, then address size followed by address bytes, then port size followed by port bytes.
129  FCL_LPSV, ///< Long Passive. Obsolete command. Similar to the PASV command, but permits larger addresses. Format is identical to the LPRT command.
130  FCL_XCUP, ///< Change to Parent Directory. Obsolete command, but can be used an an alias for CDUP to provide backwards compatibility.
131  FCL_XCWD, ///< Change Working Directory. Obsolete command, but can be used an an alias for CWD to provide backwards compatibility.
132  FCL_XMKD, ///< Make Directory. Obsolete command, but can be used an an alias for MKD to provide backwards compatibility.
133  FCL_XPWD, ///< Print Working Directory. Obsolete command, but can be used an an alias for PWD to provide backwards compatibility.
134  FCL_XRCP, ///< Unknown Meaning. Obsolete command, do not use. Listed here for error detection server side. Use of this command is always an error.
135  FCL_XRMD, ///< Remove Directory. Obsolete command, but can be used an an alias for RMD to provide backwards compatibility.
136  FCL_XRSQ, ///< Unknown Meaning. Obsolete command, do not use. Listed here for error detection server side. Use of this command is always an error.
137  FCL_XSEM, ///< Send to Mail. Obsolete command, do not use. Listed here for error detection server side. Use of this command is always an error.
138  FCL_XSEN ///< Send to Terminal. Obsolete command, do not use. Listed here for error detection server side. Use of this command is always an error.
139  };
140 
141  /// @brief This enum is a listing of the available data types to transfer as with FTP.
143  {
144  FDT_ASCII = 'A', ///< Plain text data. This is the default type.
145  FDT_EBCDIC = 'E', ///< Extended Binary Coded Decimal Interchange Code. That was a mouthful. An 8-bit IBM encoding. FTP supports it, sorta. So it's here.
146  FDT_Binary = 'I', ///< Binary data. The "I" is for Image, which when FTP was made was figured to be the most common and often exclusive use of binary transfers with FTP.
147  FDT_Local = 'L' ///< The local binary type. Is immediately followed by a number indicating the byte size of the system. "L8" for example.
148  };
149 
150  /// @brief This enum is a listing of the response codes that can be used in response to FTP commands.
152  {
153  FRC_Invalid = 0, ///< Not an actual return code, used in error conditions.
154  // 100 Series - The requested action is being initiated, expect another reply before proceeding with a new command.
155  FRC_RestartMarkerReply = 110, ///< Restart marker reply.
156  FRC_ServiceReadySoon = 120, ///< Service ready in nnn minutes.
157  FRC_DataConnectionAlreadyOpen = 125, ///< Data connection already open; transfer starting.
158  FRC_DataConnectionOpening = 150, ///< File status okay; about to open data connection.
159  // 200 Series - The requested action has been successfully completed.
160  FRC_Ok = 200, ///< Command acknowledged and completed.
161  FRC_PointlessCommand = 202, ///< Command not implemented, superfluous at this site.
162  FRC_SystemStatus = 211, ///< System status, or system help reply.
163  FRC_DirectoryStatus = 212, ///< Directory status.
164  FRC_FileStatus = 213, ///< File status.
165  FRC_Help = 214, ///< Help message.On how to use the server or the meaning of a particular non-standard command.
166  FRC_SystemType = 215, ///< Name of system type.
167  FRC_ServiceReady = 220, ///< Service ready for new user.
168  FRC_ServiceClosing = 221, ///< Service closing control connection.
169  FRC_DataConnectionOpen = 225, ///< Data connection open; no transfer in progress.
170  FRC_DataConnectionClosing = 226, ///< Closing data connection. Requested file action successful (for example, file transfer or file abort).
171  FRC_EnteringPassive = 227, ///< Entering Passive Mode.
172  FRC_EnteringLongPassive = 228, ///< Entering Long Passive Mode.
173  FRC_EnteringExtendedPassive = 229, ///< Entering Extended Passive Mode.
174  FRC_UserLoggedIn = 230, ///< User logged in, proceed.
175  FRC_UserLoggedOut = 231, ///< User logged out; service terminated.
176  FRC_LogoutAcknowledged = 232, ///< Logout command noted, will complete when transfer done.
177  FRC_AuthenticationSuccess = 234, ///< Specifies that the server accepts the authentication mechanism specified by the client, and the exchange of security data is complete.
178  FRC_FileActionComplete = 250, ///< Requested file action okay, completed.
179  FRC_PathnameCreated = 257, ///< The file or directory was successfully created.
180  // 300 Series - The command has been accepted, but the requested action is on hold, pending receipt of further information.
181  FRC_NeedPassword = 331, ///< User name okay, need password.
182  FRC_NeedAccount = 332, ///< Need account for login.
183  FRC_FileActionPending = 350, ///< Requested file action pending further information.
184  // 400 Series - The command was not accepted and the requested action did not take place, but the error condition is temporary and the action may be requested again.
185  FRC_ServiceUnavailable = 421, ///< Service not available, closing control connection.
186  FRC_DataConnectionFailed = 425, ///< Can't open data connection.
187  FRC_ConnectionClosedUnexpectedly = 426, ///< Connection closed; transfer aborted.
188  FRC_BadUserOrPass = 430, ///< Invalid username or password
189  FRC_HostUnavailable = 434, ///< Requested host unavailable.
190  FRC_FileActionFailed = 450, ///< Requested file action not taken.
191  FRC_LocalError = 451, ///< Requested action aborted. Local error in processing.
192  FRC_InsufficientStorage = 452, ///< Requested action not taken due to lack of storage space.
193  // 500 Series - Syntax error, command unrecognized and the requested action did not take place. This may include errors such as command line too long.
194  FRC_SyntaxError = 501, ///< Syntax error in parameters or arguments.
195  FRC_BadCommand = 502, ///< Command not implemented.
196  FRC_BadCommandSequence = 503, ///< Bad sequence of commands. A command is issued without a prerequisite command being completed can cause this.
197  FRC_BadParameter = 504, ///< Command not implemented for that parameter.
198  FRC_NotLoggedIn = 530, ///< Not logged in.
199  FRC_InsufficientPermissions = 532, ///< Need account for storing files.
200  FRC_FileUnavailable = 550, ///< Requested action not taken. File unavailable.
201  FRC_PageTypeUnknown = 551, ///< Requested action aborted. Page type unknown.
202  FRC_ExceededAllocation = 552, ///< Requested file action aborted. Exceeded storage allocation (for current directory or dataset).
203  FRC_NameNotAllowed = 553, ///< Requested action not taken. File name not allowed.
204  // 600 Series - Replies regarding confidentiality and integrity.
205  FRC_IntegrityReply = 631, ///< Integrity protected reply.
206  FRC_ConfAndIntegReply = 632, ///< Confidentiality and integrity protected reply.
207  FRC_ConfidentialityReply = 633 ///< Confidentiality protected reply.
208  };
209 
210  /// @brief This enum is a listing of the potential security levels that can be used on an FTPS data channel.
212  {
213  FSL_Clear = 'C', ///< No security on the data channel. This is the default setting.
214  FSL_Safe = 'S', ///< Data will be integrity protected. Not used by TLS/SSL.
215  FSL_Confidential = 'E', ///< Data will be confidentiality protected. Not used by TLS/SSL.
216  FSL_Private = 'P' ///< Data will be both integrity and confidentiality protected.
217  };
218 
219  /// @brief This enum is a listing of the available file system structures to be transferred, as recognized by FTP.
220  /// @details I'll level with you here...even after some research I'm not sure what exactly the Record and Page values are for. I mean...I
221  /// could guess, but I'd rather document my ignorance than a guess. In almost all cases (and I say "almost" strictly because once I say
222  /// 100% that one case will slap me in the face) File is the only setting you'll use. This enum exists for completions sake. I cannot,
223  /// and will not, be stopped.
225  {
226  FSM_File = 'F', ///< Configure the FTP server for file transfer. This is the default setting.
227  FSM_Record = 'R', ///< See detailed description.
228  FSM_Page = 'P' ///< See detailed description.
229  };
230 
231  /// @brief This enum is a listing of the available ways data can be transferred over FTP.
233  {
234  FTM_Stream = 'S', ///< Stream the file from the source. This is the default mode.
235  FTM_Block = 'B', ///< Send the file over in pre-sized blocks.
236  FTM_Compressed = 'C' ///< Compress the file and then stream it from the source.
237  };
238 
239  /// @brief This enum is a listing of commonly supported HTTP request methods.
240  /// @details GET and HEAD are expected to be implemented by all HTTP servers, and generally can be used without much issue. OPTIONS is also
241  /// expected to be available but is a little less often. Other requests may or may not be available. OPTIONS can be used to see what is
242  /// available on a given server, or you can just make a request and see if it returns "HSC_BadRequest" or "HSC_NotImplemented".
244  {
245  HRM_Invalid = 0, ///< Use for error conditions, not an actual request method.
246  // HTTP 1.0 Methods
247  HRM_GET = 1, ///< Requests a representation of the specified resource.
248  HRM_HEAD = 2, ///< Similar to GET, but only requests the header without the body.
249  HRM_POST = 3, ///< Requests the server accept enclosed data as a new subordinate of the specified resource/URI. Such as a blog or forum post.
250  // HTTP 1.1 Methods
251  HRM_OPTIONS = 4, ///< Retrieves a list of the supported HTTP methods on the server.
252  HRM_PUT = 5, ///< Places or replaces a supplied resource at the specified URI.
253  HRM_DELETE = 6, ///< Deletes the specified resource.
254  HRM_TRACE = 7, ///< Requests a list of changes or additions done by other sessions.
255  HRM_CONNECT = 8, ///< Converts the request connection to a tunnel, useful for sending traffic through a proxy.
256  // RFC 5789 Method Extensions
257  HRM_PATCH = 9, ///< Applies partial modifications to a resource.
258  // WebDAV Method Extensions
259  HRM_PROPFIND = 10, ///< Retrieves a property, stored as XML, from a resource. Can alternatively be overloaded to retrieve the directory hierarchy of a remote system.
260  HRM_PROPPATCH = 11, ///< Can change and/or delete multiple properties of a resource in a single atomic act.
261  HRM_MKCOL = 12, ///< Can be used to create a new directory. "COL" is short for Collection, which is the term commonly used for directories in this context.
262  HRM_COPY = 13, ///< Copies a resource from one URI to another.
263  HRM_MOVE = 14, ///< Moves a resource from one URI to another.
264  HRM_LOCK = 15, ///< Locks a resource to prevent alterations being made to it by another session. This is similar in function to mutexes.
265  HRM_UNLOCK = 16 ///< Unlocks a resource, freeing it for other purposes.
266  };
267 
268  /// @brief This enum is a listing of HTTP status codes that can be returned in response to a request.
270  {
271  HSC_Invalid = 0, ///< Used for internal error conditions, not an actual status code.
272  // 1xx Status Codes - Informational - Only available in HTTP 1.1
273  HSC_Continue = 100, ///< Available in HTTP 1.1. Server has received the request header and client should sent the request body.
274  HSC_SwitchingProtocols = 101, ///< Available in HTTP 1.1. Server is acknowledging the requesters desire to switch protocols and is doing so.
275  HSC_Processing = 102, ///< Available in WebDAV/RFC 2518. Server acknowledges the request, but it will take some time.
276  // 2xx Status Codes - Success
277  HSC_Ok = 200, ///< Available in HTTP 1.0. Standard successful response to a request.
278  HSC_Created = 201, ///< Available in HTTP 1.0. The request to create a resource was successful.
279  HSC_Accepted = 202, ///< Available in HTTP 1.0. The request was successful, but will take time to process.
280  HSC_NonAuthoritativeInfo = 203, ///< Available in HTTP 1.1. The request was successful, but the returned result may be from another source/server.
281  HSC_NoContent = 204, ///< Available in HTTP 1.0. The request was successful, but there is no content to be returned by it.
282  HSC_ResetContent = 205, ///< Available in HTTP 1.0. Similar to MSC_NoContent, but additionally the server is requiring the requester reset the document view.
283  HSC_PartialContent = 206, ///< Available in RFC 7233. The request was successful, but only part of the content is being delivered due to a range header sent by the client.
284  HSC_MultiStatus = 207, ///< Available in WebDAV/RFC 4918. A WebDAV response that means there are multiple statuses to be reported due to multiple sub-requests being sent by the client.
285  HSC_AlreadyReported = 208, ///< Available in WebDAV/RFC 5842. A WebDAV response that means members of a DAV binding have already been reported in a previous reply (to the same request) and won't be reported again.
286  HSC_IMUsed = 226, ///< Available in RFC 3229. The request was successful, and the response is a representation of the result of one or more instance manipulations applied to the current instance.
287  // 3xx Status Codes - Redirection
288  HSC_MultipleChoices = 300, ///< Available in HTTP 1.0. Indicates multiple options for the resource that the client may follow.
289  HSC_MovedPermanently = 301, ///< Available in HTTP 1.0. The resource has been moved and following requests should be directed to following URI.
290  HSC_Found = 302, ///< Available in HTTP 1.0. This code is a mess. Implementations often used it similarly to HSC_SeeOther, despite the standard saying otherwise. The standard meant for this to be a temporary redirect.
291  HSC_SeeOther = 303, ///< Available in HTTP 1.1. The response to the request can be found under another URI using the GET HTTP method.
292  HSC_NotModified = 304, ///< Available in RFC 7232. The requested resource has not been modified since the client last downloaded a copy.
293  HSC_UseProxy = 305, ///< Available in HTTP 1.1. The requested resource is only available through the specified proxy.
294  HSC_SwitchProxy = 306, ///< Available in HTTP 1.0, deprecated. The request should be repeated through the provided proxy.
295  HSC_TemporaryRedirect = 307, ///< Available in HTTP 1.1. The request should be repeated with the provided URI, but future calls may use the original URI.
296  HSC_PermanentRedirect = 308, ///< Available in RFC 7538. The request, and all future requests, should be repeated with the provided URI
297  // 4xx Status Codes - Client Error
298  HSC_BadRequest = 400, ///< Available in HTTP 1.0. The request couldn't be fulfilled because of an error with the request that is believed to be client-side.
299  HSC_Unauthorized = 401, ///< Available in RFC 7235. Authentication is required to access the resource. Sometimes a challenge (for authentication) will be provided along with this response.
300  HSC_PaymentRequired = 402, ///< Available in HTTP 1.0. Mostly unused, intended to express that a micropayment is necessary to access the requested resource.
301  HSC_Forbidden = 403, ///< Available in HTTP 1.0. The request was received but the server refuses to respond to it. Similar to HSC_Unauthorized, but authenticating will do nothing.
302  HSC_NotFound = 404, ///< Available in HTTP 1.0. The requested resource does not exist, but may be available in the future.
303  HSC_MethodNotAllowed = 405, ///< Available in HTTP 1.0. The request method used was made on a resource that doesn't support that method.
304  HSC_NotAcceptable = 406, ///< Available in HTTP 1.0. The requested resource can only generate content that was specified as not acceptable according to the Accept headers specified in the request.
305  HSC_ProxyAuthenticationRequired = 407, ///< Available in RFC 7235. The requesting client must authenticate itself with a proxy.
306  HSC_RequestTimeout = 408, ///< Available in HTTP 1.0. The server timed out while waiting for the clients request.
307  HSC_Conflict = 409, ///< Available in HTTP 1.0. The server detected a conflict in the clients request.
308  HSC_Gone = 410, ///< Available in HTTP 1.0. The requested resource does not exist, and will not be available in the future.
309  HSC_LengthRequired = 411, ///< Available in HTTP 1.0. The requested resource requires the request specify it's length, which it requires.
310  HSC_PreconditionFailed = 412, ///< Available in RFC 7232. The server does not meet one of the preconditions specified in the request.
311  HSC_PayloadTooLarge = 413, ///< Available in RFC 7231. The request is too large for the server to be able or willing to process.
312  HSC_RequestURITooLong = 414, ///< Available in HTTP 1.0. The URI specified in the request was too long for the server to be able or willing to process.
313  HSC_UnsupportedMediaType = 415, ///< Available in HTTP 1.0. The media type specified in the request is a type that the server does not support.
314  HSC_RequestRangeNotSatisfiable = 416, ///< Available in RFC 7233. The request has asked for a portion of a resource, which the server cannot provide.
315  HSC_ExpectationFailed = 417, ///< Available in HTTP 1.0. The server cannot meet the requirements set by the "Expect" request header.
316  HSC_ImATeapot = 418, ///< Available in RFC 2324. A joke status code, not intended for any real-world use.
317  HSC_AuthenticationTimeout = 419, ///< Source of definition unknown. The authentication that was used for a session has timed out, preventing the request from being processed.
318  HSC_MisdirectedRequest = 421, ///< Available in HTTP 2.0. The request was directed at a server that is not able to produce a response.
319  HSC_UnprocessableEntity = 422, ///< Available in WebDAV/RFC 4918. The request is well formed, but contains semantic errors preventing it from being processed.
320  HSC_Locked = 423, ///< Available in WebDAV/RFC 4918. The requested resource is currently locked.
321  HSC_FailedDependency = 424, ///< Available in WebDAV/RFC 4918. The request failed because of a previous request failure.
322  HSC_UpgradeRequired = 426, ///< Available in HTTP 1.0. The server wants the client to change to the protocol specified in the response.
323  HSC_PreconditionRequired = 428, ///< Available in RFC 6585. The server requires a request to a resource to be conditional, in order to avoid conflicts.
324  HSC_TooManyRequests = 429, ///< Available in RFC 6585. The client has sent too many requests recently to process the current request.
325  HSC_RequestHeaderFieldsTooLarge = 431, ///< Available in RFC 6585. The server will not process the request because one or more of the header fields are too large.
326  // 5xx Status Codes - Server Error
327  HSC_InternalServerError = 500, ///< Available in HTTP 1.0. Generic error message for when something goes wrong but the cause is unknown or no suitable error code for it exists.
328  HSC_NotImplemented = 501, ///< Available in HTTP 1.0. The request method is not supported or the server otherwise lacks the ability to process the request.
329  HSC_BadGateway = 502, ///< Available in HTTP 1.0. The server is currently acting as a proxy or gateway, and received an invalid response from the upstream server.
330  HSC_ServiceUnavailable = 503, ///< Available in HTTP 1.0. The server is temporarily down.
331  HSC_GatewayTimeout = 504, ///< Available in HTTP 1.0. The server is currently acting as a proxy or gateway, and didn't receive a timely response from the upstream server.
332  HSC_HTTPVersionNotSupported = 505, ///< Available in HTTP 1.0. The server does not support the version of HTTP used in the request.
333  HSC_VariantAlsoNegotiates = 506, ///< Available in RFC 2295. A transparent content negotiation for the request would result in a circular reference.
334  HSC_InsufficientStorage = 507, ///< Available in WebDAV/RFC 4918. The server does not have enough space to store the representation for the request from the client.
335  HSC_LoopDetected = 508, ///< Available in WebDAV/RFC 5842. An infinite loop was detected while processing a request.
336  HSC_NotExtended = 510, ///< Available in RFC 2774. Further extensions are required by this server to fulfill the request.
337  HSC_NetAuthenticationRequired = 511 ///< Available in RFC 6585. The client needs to authenticate in order to the connected network. Intended to be used by proxies.
338  };
339 
340  /// @brief This is an enum listing for recognized protocols on Layer 3 of the OSI model.
342  {
343  NLP_Invalid = 0, ///< Used for error conditions.
344  NLP_ICMP = 1, ///< Internet Control Message Protocol.
345  NLP_ICMPv6 = 2, ///< Internet Control Message Protocol version 6.
346  NLP_IGMP = 4, ///< Internet Group Management Protocol.
347  NLP_IPv4 = 8, ///< Internet Protocol version 4.
348  NLP_IPv6 = 16 ///< Internet Protocol version 6.
349  };
350 
351  /// @brief This is a small enum used for socket shutdown parameters.
353  {
354  SS_DontReceive = 0, ///< Socket will discard any data received.
355  SS_DontSend = 1, ///< Socket will not send any data, regardless of calls to send.
356  SS_DontSendOrReceive = 2 ///< Both "SS_DontReceive" and "SS_DontSend".
357  };
358 
359  /// @brief This is an enum listing for recognized protocols on Layer 4 of the OSI model.
361  {
362  TLP_Invalid = 0, ///< Used for error conditions.
363  TLP_SCTP = 1, ///< Stream Control Transmission Protocol.
364  TLP_TCP = 2, ///< Transmission Control Protocol.
365  TLP_UDP = 4 ///< User Datagram Protocol.
366  };
367 
368  /// @brief A listing of commonly used ports for various frequently used protocols.
370  {
371  WKP_FTPData = 20,
372  WKP_FTPControl = 21,
373  WKP_SSH = 22,
374  WKP_Telnet = 23,
375  WKP_SMTP = 25,
376  WKP_HTTP = 80,
377  WKP_NNTP = 119,
378  WKP_LDAP = 389,
379  WKP_HTTPS = 443,
380  WKP_RTSP = 554,
381  WKP_FTPSData = 989,
382  WKP_FTPSControl = 990,
383  WKP_SIP = 5060,
384  WKP_SIPS = 5061,
385  WKP_XMPP = 5222
386  };
387  }//Network
388 }//Mezzanine
389 
390 #endif
Requested action not taken. File unavailable.
See detailed description.
Transfer Mode. Sets how the data will be transferred from the source to destination. See FTPTransferMode enum.
Status. Requests the current status of the FTP server or the current executing FTP operation on the s...
WellKnownPorts
A listing of commonly used ports for various frequently used protocols.
Internet Group Management Protocol.
Available in HTTP 1.0. The requested resource requires the request specify it's length, which it requires.
Invalid username or password.
Data will be both integrity and confidentiality protected.
Binary data. The "I" is for Image, which when FTP was made was figured to be the most common and ofte...
User Name. The user name to be used for authentication to the FTP server. In most cases the user name...
Passive. Requests the server go into passive mode for the connection. Going into passive mode tells t...
Available in HTTP 1.0. The server is currently acting as a proxy or gateway, and didn't receive a tim...
Logout command noted, will complete when transfer done.
See detailed description.
Retrieves a list of the supported HTTP methods on the server.
Command acknowledged and completed.
Data Type. Sets the type of data requested the file be in for downloads or the type of data that the ...
Logout. Logs out of the FTP server and closes all connections. Pending transfers are allowed to finis...
Command not implemented, superfluous at this site.
Available in RFC 7232. The server does not meet one of the preconditions specified in the request...
User name okay, need password.
Available in HTTP 1.1. The response to the request can be found under another URI using the GET HTTP ...
User Datagram Protocol.
Data Port. Specifies the IP/Port on which to establish the data connection. Expressed in 6 comma sepa...
Extended Binary Coded Decimal Interchange Code. That was a mouthful. An 8-bit IBM encoding...
Available in HTTP 1.0. The server detected a conflict in the clients request.
Moves a resource from one URI to another.
Rename To. The new pathname of the file being renamed. This command must be preceded by a RNFR comman...
HighLevelProtocol
This is an enum listing for protocols used and recognized by software.
Print Working Directory. Requests the pathname of the current directory for FTP operations.
Available in HTTP 1.0. The request method used was made on a resource that doesn't support that metho...
Requests the server accept enclosed data as a new subordinate of the specified resource/URI. Such as a blog or forum post.
Command not implemented for that parameter.
Available in WebDAV/RFC 2518. Server acknowledges the request, but it will take some time...
Send the file over in pre-sized blocks.
Available in HTTP 1.0. The server is temporarily down.
Make Directory. Creates a new directory on the server with the name provided in the argument...
Abort. Aborts the currently active file transfer.
File status okay; about to open data connection.
Available in RFC 3229. The request was successful, and the response is a representation of the result...
File Transfer Protocol Secure.
Available in HTTP 1.0. Generic error message for when something goes wrong but the cause is unknown o...
Requested file action aborted. Exceeded storage allocation (for current directory or dataset)...
No Operation. This command does nothing and asks the server to do nothing but send a basic response...
Reinitialize. Sets the connection back to a starting state. User is logged out but the command connec...
Specifies that the server accepts the authentication mechanism specified by the client, and the exchange of security data is complete.
Confidentiality and integrity protected reply.
FTPStructureMount
This enum is a listing of the available file system structures to be transferred, as recognized by FT...
Available in HTTP 1.0. The request was successful, but will take time to process. ...
Available in HTTP 1.0. The server does not support the version of HTTP used in the request...
NetworkLayerProtocol
This is an enum listing for recognized protocols on Layer 3 of the OSI model.
Available in HTTP 1.1. The request should be repeated with the provided URI, but future calls may use...
Available in HTTP 1.1. The requested resource is only available through the specified proxy...
Available in HTTP 1.0. Standard successful response to a request.
Available in RFC 7233. The request was successful, but only part of the content is being delivered du...
Available in WebDAV/RFC 4918. The requested resource is currently locked.
Available in HTTP 1.0. The requested resource does not exist, and will not be available in the future...
Available in HTTP 1.0. The request was successful, but there is no content to be returned by it...
Internet Control Message Protocol version 6.
Not an actual return code, used in error conditions.
System status, or system help reply.
Confidentiality Protected Command. Generic command for allowing the configuration of confidentiality ...
Rename From. The pathname of the file to be renamed. This simple selects the file the operation is to...
Host. Similar to HTTP Host header, allows an FTP client to provide an FTP URI Authority to specify a ...
File Transfer Protocol.
Requested file action okay, completed.
Delete. Deletes the file specified in the argument.
Integrity Protected Command. Generic command for allowing the configuration of integrity settings on ...
Remove Directory. Deletes the directory (and all files under it) specified in the argument from the s...
Available in HTTP 1.0. The request was received but the server refuses to respond to it...
Print Working Directory. Obsolete command, but can be used an an alias for PWD to provide backwards c...
Available in HTTP 1.0. The request method is not supported or the server otherwise lacks the ability ...
Used for error conditions.
Available in HTTP 1.0, deprecated. The request should be repeated through the provided proxy...
Data connection open; no transfer in progress.
Store Unique. This is the same as STOR (Store), but forces the name of the file at the destination to...
Requests a representation of the specified resource.
Structure Mount. Allows the user to mount a file system data structure without requiring the connecti...
Used for internal error conditions, not an actual status code.
Simple Mail Transfer Protocol.
Available in HTTP 1.0. The server is currently acting as a proxy or gateway, and received an invalid ...
Available in HTTP 1.0. Indicates multiple options for the resource that the client may follow...
File Structure. Specifies the structure being transferred. Will almost never need to be used as the d...
Available in WebDAV/RFC 5842. A WebDAV response that means members of a DAV binding have already been...
Change Working Directory. Obsolete command, but can be used an an alias for CWD to provide backwards ...
Internet Protocol version 6.
Service not available, closing control connection.
Unlocks a resource, freeing it for other purposes.
Long Passive. Obsolete command. Similar to the PASV command, but permits larger addresses. Format is identical to the LPRT command.
Compress the file and then stream it from the source.
HTTPStatusCode
This enum is a listing of HTTP status codes that can be returned in response to a request...
Data Channel Protection Level. Sets the security to be used on the data channel. See FTPSecurityLevel...
Used for error conditions.
Copies a resource from one URI to another.
Places or replaces a supplied resource at the specified URI.
List. Gets information on the current directory. Either files or directories other than the current o...
Retrieves a property, stored as XML, from a resource. Can alternatively be overloaded to retrieve the...
FTPTransferMode
This enum is a listing of the available ways data can be transferred over FTP.
FTPDataType
This enum is a listing of the available data types to transfer as with FTP.
Requested action aborted. Local error in processing.
Socket will not send any data, regardless of calls to send.
Available in HTTP 1.0. Similar to MSC_NoContent, but additionally the server is requiring the request...
Available in HTTP 1.0. The server wants the client to change to the protocol specified in the respons...
TransportLayerProtocol
This is an enum listing for recognized protocols on Layer 4 of the OSI model.
File Size. Gets the size of a specified file. Argument is a file and the response will contain the si...
Available in WebDAV/RFC 4918. The server does not have enough space to store the representation for t...
Similar to GET, but only requests the header without the body.
Both "SS_DontReceive" and "SS_DontSend".
Available in RFC 6585. The client has sent too many requests recently to process the current request...
No security on the data channel. This is the default setting.
Not an actual command. Used for error conditions.
Name List. Same as the LIST command, but only specifying names so as to make it easier to parse for m...
Available in WebDAV/RFC 5842. An infinite loop was detected while processing a request.
Available in HTTP 1.0. The media type specified in the request is a type that the server does not sup...
Extended Passive. This is similar to LPSV, but with friendlier syntax. The format is identical to the...
Internet Control Message Protocol.
Options. Enables command specific options for the next command issued. Argument must be the command n...
Available in RFC 7235. The requesting client must authenticate itself with a proxy.
Available in RFC 6585. The server will not process the request because one or more of the header fiel...
Plain text data. This is the default type.
Clear Command Channel. Clears the command stream of protected status, reverting to plain-text transmi...
Site. Executes a command that is not in the standard specific to the connected server. The argument is the command to be executed.
Available in HTTP 1.0. The requested resource can only generate content that was specified as not acc...
Change to Parent Directory. Changes the directory for file/folder operations to the parent of the cur...
Requested file action pending further information.
FTPResponseCode
This enum is a listing of the response codes that can be used in response to FTP commands.
FTPCommandList
This enum is a listing of the commands that can be issued to an FTP server.
Available in RFC 2295. A transparent content negotiation for the request would result in a circular r...
Used for error conditions.
Available in HTTP 1.0. This code is a mess. Implementations often used it similarly to HSC_SeeOther...
Protection BufferSize. Sets the maximum size (in bytes, max of 32-bit UInt) of the encoded blocks to ...
Available in HTTP 1.0. The request couldn't be fulfilled because of an error with the request that is...
Remove Directory. Obsolete command, but can be used an an alias for RMD to provide backwards compatib...
Data will be confidentiality protected. Not used by TLS/SSL.
Requests a list of changes or additions done by other sessions.
The local binary type. Is immediately followed by a number indicating the byte size of the system...
Available in WebDAV/RFC 4918. A WebDAV response that means there are multiple statuses to be reported...
Deletes the specified resource.
Applies partial modifications to a resource.
Restart. The point where the file transfer is to begin. For files, the argument should an integer rep...
Stream the file from the source. This is the default mode.
Unknown Meaning. Obsolete command, do not use. Listed here for error detection server side...
Data will be integrity protected. Not used by TLS/SSL.
Available in HTTP 1.0. The server timed out while waiting for the clients request.
Available in RFC 2324. A joke status code, not intended for any real-world use.
Retrieve. Downloads a file from the server, expecting a filename at the source as the argument...
Change to Parent Directory. Obsolete command, but can be used an an alias for CDUP to provide backwar...
System. Requests an identifier for the type of system the server is operating on as well as the defau...
Change Working Directory. Changes the current directory for file/folder operations.
Features. Requests a listing of the available features/extensions on the server. No argument needed...
Requested file action not taken.
Closing data connection. Requested file action successful (for example, file transfer or file abort)...
User logged out; service terminated.
Authentication/Security Data. A String of Base64 encoded data necessary to complete the authenticatio...
Transmission Control Protocol.
Available in HTTP 1.0. Mostly unused, intended to express that a micropayment is necessary to access ...
Account. Identifies the users account. While similar sounding to the USER command, some servers differentiate the two when determining access.
Send to Terminal. Obsolete command, do not use. Listed here for error detection server side...
Source of definition unknown. The authentication that was used for a session has timed out...
Available in HTTP 1.1. Server has received the request header and client should sent the request body...
Available in WebDAV/RFC 4918. The request is well formed, but contains semantic errors preventing it ...
Available in WebDAV/RFC 4918. The request failed because of a previous request failure.
Available in HTTP 2.0. The request was directed at a server that is not able to produce a response...
Available in RFC 7538. The request, and all future requests, should be repeated with the provided URI...
The bulk of the engine components go in this namspace.
Definition: actor.cpp:56
Available in RFC 7233. The request has asked for a portion of a resource, which the server cannot pro...
Available in HTTP 1.0. The URI specified in the request was too long for the server to be able or wil...
Available in RFC 7232. The requested resource has not been modified since the client last downloaded ...
Available in RFC 6585. The client needs to authenticate in order to the connected network...
Allocate. Requests the server allocate space for a file in advance. Many servers don't require this...
Append. Appends the contents of the transfer to an existing file at the destination. If the file does not exist it will be created.
Converts the request connection to a tunnel, useful for sending traffic through a proxy...
Password. The users password for authentication.
Machine List Directory. Gets a machine friendly listing of all the files in the specified directory...
Authentication/Security Mechanism. Declares the desired means of protection on the FTP connection(s)...
Modification Time. Gets the time a file was last modified. Argument should be a file name...
Stream Control Transmission Protocol.
Long Port. Obsolete command. Similar to the PORT command, but permits larger addresses. The format is comma separated bytes. Starts with an address family, then address size followed by address bytes, then port size followed by port bytes.
Requested action not taken due to lack of storage space.
Make Directory. Obsolete command, but can be used an an alias for MKD to provide backwards compatibil...
Data connection already open; transfer starting.
Syntax error in parameters or arguments.
Can change and/or delete multiple properties of a resource in a single atomic act.
Help message.On how to use the server or the meaning of a particular non-standard command...
HTTPRequestMethod
This enum is a listing of commonly supported HTTP request methods.
Help. Another command may be specified as an argument to get details on it's implementation status on...
Can be used to create a new directory. "COL" is short for Collection, which is the term commonly used...
Available in HTTP 1.0. The resource has been moved and following requests should be directed to follo...
SocketShutdown
This is a small enum used for socket shutdown parameters.
Service closing control connection.
Available in HTTP 1.1. The request was successful, but the returned result may be from another source...
Available in RFC 6585. The server requires a request to a resource to be conditional, in order to avoid conflicts.
Requested action aborted. Page type unknown.
Store. Uploads a file to the server, expecting a filename to be given to the file at the destination ...
Privacy Protected Command. Generic command for allowing the configuration of privacy settings on the ...
Bad sequence of commands. A command is issued without a prerequisite command being completed can caus...
Language. Requests the server change it's response message language to a different language...
Available in RFC 2774. Further extensions are required by this server to fulfill the request...
Unknown Meaning. Obsolete command, do not use. Listed here for error detection server side...
Locks a resource to prevent alterations being made to it by another session. This is similar in funct...
FTPSecurityLevel
This enum is a listing of the potential security levels that can be used on an FTPS data channel...
Available in RFC 7231. The request is too large for the server to be able or willing to process...
Hyper-Text Transfer Protocol.
Hyper-Text Transfer Protocol Secure.
Configure the FTP server for file transfer. This is the default setting.
Send to Mail. Obsolete command, do not use. Listed here for error detection server side...
Internet Protocol version 4.
Available in HTTP 1.0. The request to create a resource was successful.
Requested action not taken. File name not allowed.
The file or directory was successfully created.
Available in RFC 7235. Authentication is required to access the resource. Sometimes a challenge (for ...
Available in HTTP 1.1. Server is acknowledging the requesters desire to switch protocols and is doing...
Use for error conditions, not an actual request method.
Machine List. Gets a machine friendly listing of information on the specified file. The format is defined in RFC 3659, section 7.2.
Available in HTTP 1.0. The server cannot meet the requirements set by the "Expect" request header...
Socket will discard any data received.
Extended Port. This is similar to LPRT, but with friendlier syntax. Takes a "|" delimited String star...
Available in HTTP 1.0. The requested resource does not exist, but may be available in the future...