00001 #include "headers.h"
00002
00028
00029
00034 void sigHandle(int x)
00035 {
00036 debug(DEBUG_ERR, "signal occured, exiting in a moment...");
00037 OS_SPEC_SLEEP(4);
00038 exit(0);
00039 }
00040
00041
00045 TransportLayer::TransportLayer()
00046 {
00047
00048
00049 m_serviceTable = new ServiceTable();
00050 MEMCHECK(m_serviceTable);
00051 }
00052
00053
00054 TransportLayer::~TransportLayer()
00055 {
00056 delete m_serviceTable;
00057 m_serviceTable = NULL;
00058 }
00059
00060
00064 int
00065 TransportLayer::connect()
00066 {
00067 return m_serviceTable->connectService();
00068 }
00069
00070
00074
00075 int
00076 TransportLayer::listenAccept()
00077 {
00078 int serviceNum = m_serviceTable->listenService();
00079 return serviceNum;
00080 }
00081
00082
00083
00088 int
00089 TransportLayer::send(int serviceNumber, u_char *msg, int length)
00090 {
00091 if (!msg || (serviceNumber <= 0) || (length <= 0)) {
00092 return PB_ERROR;
00093 }
00094 int bytesSent;
00095 if ((bytesSent = m_serviceTable->sendData(serviceNumber, msg, length)) > 0) {
00096 return bytesSent;
00097 }
00098 else {
00099 return PB_UNREACHABLE;
00100 }
00101 }
00102
00103
00111 int
00112 TransportLayer::receive(int serviceNumber, u_char *msg, int length)
00113 {
00114 if (!msg || (serviceNumber <= 0) || (length <= 0)) {
00115 debug(DEBUG_TL, "Invalid parameters");
00116 return PB_ERROR;
00117 }
00118
00119 debug(DEBUG_TL, "Receive on service number: %d", serviceNumber);
00120
00121 return m_serviceTable->receiveData(serviceNumber, msg, length);
00122 }
00123
00124
00131 bool
00132 TransportLayer::disconnect(int serviceNumber)
00133 {
00134 return (m_serviceTable->disconnectService(serviceNumber) == PB_OK);
00135 }
00136
00137
00138 ServiceTable*
00139 TransportLayer::getServiceTable() {
00140 return m_serviceTable;
00141 }
00142
00143
00144 NetworkLayer*
00145 TransportLayer::getNetworkLayer() {
00146 return m_serviceTable->getNetworkLayer();
00147 }
00148
00149