A Simple TCP & UDP Socket Library

Dependents:   SimpleSocketExamples 1.0

Committer:
yamaguch
Date:
Tue Jun 05 05:56:49 2012 +0000
Revision:
0:3eb1ce25eac4
1.1.3; fixed 0x00 reception bug

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yamaguch 0:3eb1ce25eac4 1 /*
yamaguch 0:3eb1ce25eac4 2 Copyright (c) 2011, Senio Networks, Inc.
yamaguch 0:3eb1ce25eac4 3
yamaguch 0:3eb1ce25eac4 4 Permission is hereby granted, free of charge, to any person obtaining a copy
yamaguch 0:3eb1ce25eac4 5 of this software and associated documentation files (the "Software"), to deal
yamaguch 0:3eb1ce25eac4 6 in the Software without restriction, including without limitation the rights
yamaguch 0:3eb1ce25eac4 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
yamaguch 0:3eb1ce25eac4 8 copies of the Software, and to permit persons to whom the Software is
yamaguch 0:3eb1ce25eac4 9 furnished to do so, subject to the following conditions:
yamaguch 0:3eb1ce25eac4 10
yamaguch 0:3eb1ce25eac4 11 The above copyright notice and this permission notice shall be included in
yamaguch 0:3eb1ce25eac4 12 all copies or substantial portions of the Software.
yamaguch 0:3eb1ce25eac4 13
yamaguch 0:3eb1ce25eac4 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
yamaguch 0:3eb1ce25eac4 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
yamaguch 0:3eb1ce25eac4 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
yamaguch 0:3eb1ce25eac4 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
yamaguch 0:3eb1ce25eac4 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
yamaguch 0:3eb1ce25eac4 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
yamaguch 0:3eb1ce25eac4 20 THE SOFTWARE.
yamaguch 0:3eb1ce25eac4 21 */
yamaguch 0:3eb1ce25eac4 22
yamaguch 0:3eb1ce25eac4 23 #include "SimpleSocket.h"
yamaguch 0:3eb1ce25eac4 24
yamaguch 0:3eb1ce25eac4 25 SocketEvent::SocketEvent(TCPSocketEvent event) : event(event) {}
yamaguch 0:3eb1ce25eac4 26
yamaguch 0:3eb1ce25eac4 27 char *SocketEvent::toString() {
yamaguch 0:3eb1ce25eac4 28 switch (event) {
yamaguch 0:3eb1ce25eac4 29 case TCPSOCKET_CONNECTED:
yamaguch 0:3eb1ce25eac4 30 return "TCPSOCKET_CONNECTED: Connected to host.\n";
yamaguch 0:3eb1ce25eac4 31 case TCPSOCKET_ACCEPT:
yamaguch 0:3eb1ce25eac4 32 return "TCPSOCKET_ACCEPT: Client is connected, must call accept() to get a new Socket.\n";
yamaguch 0:3eb1ce25eac4 33 case TCPSOCKET_READABLE:
yamaguch 0:3eb1ce25eac4 34 return "TCPSOCKET_READABLE: Data in buf.\n";
yamaguch 0:3eb1ce25eac4 35 case TCPSOCKET_WRITEABLE:
yamaguch 0:3eb1ce25eac4 36 return "TCPSOCKET_WRITEABLE: Can write data to buf.\n";
yamaguch 0:3eb1ce25eac4 37 case TCPSOCKET_CONTIMEOUT:
yamaguch 0:3eb1ce25eac4 38 return "TCPSOCKET_CONTIMEOUT: Connection timed out.\n";
yamaguch 0:3eb1ce25eac4 39 case TCPSOCKET_CONRST:
yamaguch 0:3eb1ce25eac4 40 return "TCPSOCKET_CONRST: Connection was reset by remote host.\n";
yamaguch 0:3eb1ce25eac4 41 case TCPSOCKET_CONABRT:
yamaguch 0:3eb1ce25eac4 42 return "TCPSOCKET_CONABRT: Connection was aborted.\n";
yamaguch 0:3eb1ce25eac4 43 case TCPSOCKET_ERROR:
yamaguch 0:3eb1ce25eac4 44 return "TCPSOCKET_ERROR: Unknown error.\n";
yamaguch 0:3eb1ce25eac4 45 case TCPSOCKET_DISCONNECTED:
yamaguch 0:3eb1ce25eac4 46 return "TCPSOCKET_DISCONNECTED: Disconnected.\n";
yamaguch 0:3eb1ce25eac4 47 default:
yamaguch 0:3eb1ce25eac4 48 static char buf[32];
yamaguch 0:3eb1ce25eac4 49 sprintf(buf, "UNKNOWN EVENT (%d).\n", event);
yamaguch 0:3eb1ce25eac4 50 return buf;
yamaguch 0:3eb1ce25eac4 51 }
yamaguch 0:3eb1ce25eac4 52 }
yamaguch 0:3eb1ce25eac4 53
yamaguch 0:3eb1ce25eac4 54 SocketEvent::operator char *() {
yamaguch 0:3eb1ce25eac4 55 return toString();
yamaguch 0:3eb1ce25eac4 56 }
yamaguch 0:3eb1ce25eac4 57
yamaguch 0:3eb1ce25eac4 58 SocketEvent::operator int() {
yamaguch 0:3eb1ce25eac4 59 return event;
yamaguch 0:3eb1ce25eac4 60 }
yamaguch 0:3eb1ce25eac4 61
yamaguch 0:3eb1ce25eac4 62 SocketError::SocketError(TCPSocketErr err) : err(err) {};
yamaguch 0:3eb1ce25eac4 63
yamaguch 0:3eb1ce25eac4 64 char *SocketError::toString() {
yamaguch 0:3eb1ce25eac4 65 switch (err) {
yamaguch 0:3eb1ce25eac4 66 case TCPSOCKET_SETUP:
yamaguch 0:3eb1ce25eac4 67 return "TCPSOCKET_SETUP: TCPSocket not properly configured.\n";
yamaguch 0:3eb1ce25eac4 68 case TCPSOCKET_TIMEOUT:
yamaguch 0:3eb1ce25eac4 69 return "TCPSOCKET_TIMEOUT: Connection timed out.\n";
yamaguch 0:3eb1ce25eac4 70 case TCPSOCKET_IF:
yamaguch 0:3eb1ce25eac4 71 return "TCPSOCKET_IF: Interface has problems, does not exist or is not initialized.\n";
yamaguch 0:3eb1ce25eac4 72 case TCPSOCKET_MEM:
yamaguch 0:3eb1ce25eac4 73 return "TCPSOCKET_MEM: Not enough memory.\n";
yamaguch 0:3eb1ce25eac4 74 case TCPSOCKET_INUSE:
yamaguch 0:3eb1ce25eac4 75 return "TCPSOCKET_INUSE: Interface/Port is in use.\n";
yamaguch 0:3eb1ce25eac4 76 case TCPSOCKET_EMPTY:
yamaguch 0:3eb1ce25eac4 77 return "TCPSOCKET_EMPTY: Connections queue is empty.\n";
yamaguch 0:3eb1ce25eac4 78 case TCPSOCKET_RST:
yamaguch 0:3eb1ce25eac4 79 return "TCPSOCKET_RST: Connection was reset by remote host.\n";
yamaguch 0:3eb1ce25eac4 80 case TCPSOCKET_OK:
yamaguch 0:3eb1ce25eac4 81 return "TCPSOCKET_OK: Success.\n";
yamaguch 0:3eb1ce25eac4 82 default:
yamaguch 0:3eb1ce25eac4 83 return "TCPSOCKET unknown error occurred.\n";
yamaguch 0:3eb1ce25eac4 84 }
yamaguch 0:3eb1ce25eac4 85 }
yamaguch 0:3eb1ce25eac4 86
yamaguch 0:3eb1ce25eac4 87 SocketError::operator char *() {
yamaguch 0:3eb1ce25eac4 88 return toString();
yamaguch 0:3eb1ce25eac4 89 }
yamaguch 0:3eb1ce25eac4 90
yamaguch 0:3eb1ce25eac4 91 SocketError::operator int() {
yamaguch 0:3eb1ce25eac4 92 return err;
yamaguch 0:3eb1ce25eac4 93 }
yamaguch 0:3eb1ce25eac4 94
yamaguch 0:3eb1ce25eac4 95 DatagramEvent::DatagramEvent(UDPSocketEvent event) : event(event) {}
yamaguch 0:3eb1ce25eac4 96
yamaguch 0:3eb1ce25eac4 97 char *DatagramEvent::toString() {
yamaguch 0:3eb1ce25eac4 98 switch (event) {
yamaguch 0:3eb1ce25eac4 99 case UDPSOCKET_READABLE:
yamaguch 0:3eb1ce25eac4 100 return "UDPSOCKET_READABLE: Data in buf.\n";
yamaguch 0:3eb1ce25eac4 101 default:
yamaguch 0:3eb1ce25eac4 102 static char buf[32];
yamaguch 0:3eb1ce25eac4 103 sprintf(buf, "UNKNOWN EVENT (%d).\n", event);
yamaguch 0:3eb1ce25eac4 104 return buf;
yamaguch 0:3eb1ce25eac4 105 }
yamaguch 0:3eb1ce25eac4 106 }
yamaguch 0:3eb1ce25eac4 107
yamaguch 0:3eb1ce25eac4 108 DatagramEvent::operator char *() {
yamaguch 0:3eb1ce25eac4 109 return toString();
yamaguch 0:3eb1ce25eac4 110 }
yamaguch 0:3eb1ce25eac4 111
yamaguch 0:3eb1ce25eac4 112 DatagramEvent::operator int() {
yamaguch 0:3eb1ce25eac4 113 return event;
yamaguch 0:3eb1ce25eac4 114 }
yamaguch 0:3eb1ce25eac4 115
yamaguch 0:3eb1ce25eac4 116 DatagramError::DatagramError(UDPSocketErr err) : err(err) {};
yamaguch 0:3eb1ce25eac4 117
yamaguch 0:3eb1ce25eac4 118 char *DatagramError::toString() {
yamaguch 0:3eb1ce25eac4 119 switch (err) {
yamaguch 0:3eb1ce25eac4 120 case UDPSOCKET_SETUP:
yamaguch 0:3eb1ce25eac4 121 return "UDPSOCKET_SETUP: UDPSocket not properly configured.\n";
yamaguch 0:3eb1ce25eac4 122 case UDPSOCKET_IF:
yamaguch 0:3eb1ce25eac4 123 return "UDPSOCKET_IF: Interface has problems, does not exist or is not initialized.\n";
yamaguch 0:3eb1ce25eac4 124 case UDPSOCKET_MEM:
yamaguch 0:3eb1ce25eac4 125 return "UDPSOCKET_MEM: Not enough memory.\n";
yamaguch 0:3eb1ce25eac4 126 case UDPSOCKET_INUSE:
yamaguch 0:3eb1ce25eac4 127 return "UDPSOCKET_INUSE: Interface/Port is in use.\n";
yamaguch 0:3eb1ce25eac4 128 case UDPSOCKET_OK:
yamaguch 0:3eb1ce25eac4 129 return "UDPSOCKET_OK: Success.\n";
yamaguch 0:3eb1ce25eac4 130 default:
yamaguch 0:3eb1ce25eac4 131 return "UDPSOCKET unknown error occurred.\n";
yamaguch 0:3eb1ce25eac4 132 }
yamaguch 0:3eb1ce25eac4 133 }
yamaguch 0:3eb1ce25eac4 134
yamaguch 0:3eb1ce25eac4 135 DatagramError::operator char *() {
yamaguch 0:3eb1ce25eac4 136 return toString();
yamaguch 0:3eb1ce25eac4 137 }
yamaguch 0:3eb1ce25eac4 138
yamaguch 0:3eb1ce25eac4 139 DatagramError::operator int() {
yamaguch 0:3eb1ce25eac4 140 return err;
yamaguch 0:3eb1ce25eac4 141 }