46 Commits

Author SHA1 Message Date
Unknown
5778310798 Fixed incompatabilities between GCC and MSCV
Build errors have been fixed, but there are build warnings remaining about unsafe conversions, because Visual C++'s network conversion functions have a differing return type to mine. To be fixed in the future.
2017-05-28 18:09:29 +01:00
Fred Nicolson
ae61464aee Removed is_connected flag in fr::Socket
The socket descriptor is now checked, to see if it's greater than 0, instead. This means that the flag doesn't have to be manually updated.
2017-05-25 16:21:39 +01:00
Fred Nicolson
e0f68fb037 Added const specifiers to fr::URL members 2017-05-24 13:45:33 +01:00
Fred Nicolson
431f646bae Moved URL class into fr namespace
It should not have been in the global namespace, as it's a part of the library.
2017-05-24 09:54:19 +01:00
Fred Nicolson
7d0edb160e Bug fixes. Added ability to set ai_family on SSL listeners.
fr::Listener's destructor wasn't virtual, so children's destructors weren't being called.

fr::TcpListener did not have a destructor, and so did not close its socket on destruction. 

fr::SSLListener now uses fr::TcpListener's 'listen' function instead of its own, as a temporary hack, as mbedtls does not support setting the address families.

Added get/set functions to the listeners for their socket descriptors.
2017-05-23 21:17:39 +01:00
Fred Nicolson
68c214ef7e Merge pull request #5 from Cloaked9000/Mbedtls_Modified
Mbedtls modified
2017-05-23 20:48:45 +01:00
Fred Nicolson
40f8ccb067 Added URL parsing class
Allows the parsing of full URLs into easy chunks. Added as a helper class for users of the library dealing with URLs, and to potentially replace some of the HTTP parsing code in the future.
2017-05-23 16:52:55 +01:00
Fred Nicolson
60dfd44c0f Fixed errors not returning from SSLContext load crt 2017-05-11 14:09:55 +01:00
Fred Nicolson
9646d72e74 Added ability to set address family for sockets. Improved sslcontext.
Certs can now either be loaded from memory or disk.

You can specify if you want to use ipv4/ipv6/either when connecting or accepting.
2017-05-11 11:43:01 +01:00
Fred Nicolson
7ea87cced8 Added helpers for detecting mimetype
fr::Http::get_mimetype(filename) will return the mimetype of a given filename or file extention. This should be used to set the 'content-type' header when creating fr::HttpResponses.
2017-05-07 10:44:33 +01:00
Fred Nicolson
53ab6e2090 Header names are automatically lower-cased now. 2017-04-11 10:39:23 +01:00
Fred Nicolson
6b1ef27764 Re-wrote HTML request/response parsing
It's now much more robust, supports requests received over multiple recvs. Supports POST variables. Supports 'content-length' header.
2017-04-10 17:24:57 +01:00
Fred Nicolson
eaefd93096 Re-arranged things 2017-04-07 09:22:31 +01:00
Fred Nicolson
5757eb776c Preparing to add support for larger HTTP requests 2017-04-06 14:07:03 +01:00
Fred Nicolson
3c6e6ec1b6 Added 'shutdown' to listeners 2017-03-31 14:37:31 +01:00
Fred Nicolson
f101dc5718 Added missing access specifier to Listener 2017-03-31 12:28:39 +01:00
Fred Nicolson
e15afb3d87 Cleaned up Listener code
Now inherits a 'Listener' class, instead of Socket.
2017-03-31 12:15:13 +01:00
Cloaked9000
9c520c3a0b Disable SIGPIPE, should disconnect socket now instead 2017-02-14 17:04:21 +00:00
Cloaked9000
7fccf5dda4 Added more HTTP status codes. Added packet read/write raw. 2017-02-10 10:56:08 +00:00
Cloaked9000
5c021761a8 Merged branch master into master 2017-02-02 11:51:43 +00:00
Cloaked9000
5c94b3f6df Added 'fr::Packetable' to allow custom objects to be packed into packets
Can be used by inheriting the 'pack' and 'unpack' members of fr::Packetable. The 'pack' function should add your class members to the packet, and the 'unpack' function should take them back out.
2017-02-02 11:51:31 +00:00
Cloaked9000
1251c303db Removed needless default constructor 2017-01-30 12:09:26 +00:00
Cloaked9000
cc68e4d32d Added missing header 2017-01-30 12:04:55 +00:00
Cloaked9000
15d20388c1 Added more type support to fr::Packet
Added std::pair<> support.

Added enum/enum class support
2017-01-27 15:36:36 +00:00
Fred Nicolson
24195e402f Bug fixes
Fixed deadlock in fr::Socket::receive.

Fixed fr::Packet's second constructor not delegating to first, causing it's intenal buffer to remain unitialised.
2017-01-26 21:58:20 +00:00
Fred Nicolson
2abe108d57 Merge fix 2017-01-25 22:59:56 +00:00
Fred Nicolson
fad7d0b81f Packet and socket optimisations
Sending/receiving data on a socket is roughly 5.5x faster, after removing data copies and buffer re-allocations.
2017-01-25 22:57:11 +00:00
Cloaked9000
7691ed0a76 Added uint8_t support for packets 2017-01-23 17:56:20 +00:00
Cloaked9000
78098c7d32 Merged branch master into master 2017-01-23 09:15:44 +00:00
Cloaked9000
657c8e21ad Mutex changes 2017-01-23 09:15:40 +00:00
Fred Nicolson
6b2947932a Bux fixes
Fixed typo causing fr::Packet string extraction to fail.
Fixed Windows compilation error.
2017-01-22 14:20:24 +00:00
Fred Nicolson
f8aa22d223 Performance improvements and fixes
Greatly improvded fr::Packet>> performance.
Added buffer overflow protection to fr::Packet>>.
Added fr::Packet::reset_read_cursor to reset the packet data read position back to the beginning.
2017-01-22 12:11:17 +00:00
Cloaked9000
64f35e2a92 Increased receive chunk size to 4096 bytes 2017-01-13 15:30:11 +00:00
Cloaked9000
db6c7e4c41 Added support for sending and receiving of std::vectors
Provided that in std::vector<T>, T is a supported packet type (std::string, uintXX_t, intXX_t....)
2017-01-10 15:21:34 +00:00
Cloaked9000
e60d961fb0 Windows compatibility fixes 2017-01-06 15:22:22 +00:00
Cloaked9000
1594d4babf Added signed types to packet 2017-01-03 18:10:26 +00:00
Fred Nicolson
27b559b4ef Added URL encoding/decoding and proper POST parsing
Also fixed last body line being ignored in requests
2016-12-31 22:05:44 +00:00
Fred Nicolson
e0e956cf78 Socket::reconfigure_socket called on connection to apply options
'TCP_NODELAY' is set automatically on connection now.
2016-12-31 11:14:26 +00:00
Fred Nicolson
2a5d960e56 Added fr::Socket::has_data to check if recv buffer is empty
If using a SocketSelector, you should keep accepting data from the socket until has_data returns false, indicating that you've read everything.
2016-12-27 21:58:39 +00:00
Fred Nicolson
8638b70fb8 Thread safety for send/receive on both Tcp & SSL sockets
Send/Recv often needs to be called multiple times to transfer all of the data. send_raw/receive_raw are now mutex protected and so both send & receive can be called simultaneously.
2016-12-23 18:23:25 +00:00
Cloaked9000
8a54e8994a Fixed read_raw buffer issues (properly this time).
Also added '<<' overload on Packet for char*
2016-12-21 17:57:39 +00:00
Cloaked9000
f74f1f1a94 Bug fixes. Better syntax.
SocketReactor actually calls callbacks.

receive_all no longer tries to access out of bound array indexes.

fr::Packet constructor can now take as many arguments as you like and they'll be added to it automatically.

Added bool fr::Packet<< operator overload.
2016-12-20 18:02:59 +00:00
Cloaked9000
70779fbe9c Added SocketReactor & fixes
Sockets will immediately return fr::Socket::Status::Disconnected if an attempt to send/receive data is made whilst the connection is closed.

Added SocketReactor, which is effectively a little wrapper around fr::SocketSelector, but can automatically call a callback for a socket when data is received on it.
2016-12-20 11:33:31 +00:00
Cloaked9000
7017b64a15 Moved fr::TcpSocket::shutdown to fr::Socket::shutdown 2016-12-20 10:12:13 +00:00
Cloaked9000
9db918c7c2 Added fr::TcpSocket::shutdown to shutdown a socket 2016-12-20 10:07:40 +00:00
Cloaked9000
2de9540819 Added windows support. Updated build system.
CMake build system builds as a library, not an executable now.

Windows is now supported and should work fine.
2016-12-19 12:10:39 +00:00