#include "RTPInterface.hh"#include <GroupsockHelper.hh>#include <stdio.h>Include dependency graph for RTPInterface.cpp:

Go to the source code of this file.
Data Structures | |
| class | SocketDescriptor |
Functions | |
| static Boolean | sendRTPOverTCP (unsigned char *packet, unsigned packetSize, int socketNum, unsigned char streamChannelId) |
| static HashTable * | socketHashTable (UsageEnvironment &env, Boolean createIfNotPresent=True) |
| static SocketDescriptor * | lookupSocketDescriptor (UsageEnvironment &env, int sockNum, Boolean createIfNotFound=True) |
| static void | removeSocketDescription (UsageEnvironment &env, int sockNum) |
| static void | deregisterSocket (UsageEnvironment &env, int sockNum, unsigned char streamChannelId) |
| static void deregisterSocket | ( | UsageEnvironment & | env, | |
| int | sockNum, | |||
| unsigned char | streamChannelId | |||
| ) | [static] |
Definition at line 154 of file RTPInterface.cpp.
References SocketDescriptor::deregisterRTPInterface(), env, False, lookupSocketDescriptor(), and NULL.
Referenced by RTPInterface::removeStreamSocket(), and RTPInterface::stopNetworkReading().
00154 { 00155 SocketDescriptor* socketDescriptor = lookupSocketDescriptor(env, sockNum, False); 00156 if (socketDescriptor != NULL) { 00157 socketDescriptor->deregisterRTPInterface(streamChannelId); 00158 // Note: This may delete "socketDescriptor", 00159 // if no more interfaces are using this socket 00160 } 00161 }
| static SocketDescriptor* lookupSocketDescriptor | ( | UsageEnvironment & | env, | |
| int | sockNum, | |||
| Boolean | createIfNotFound = True | |||
| ) | [static] |
Definition at line 80 of file RTPInterface.cpp.
References HashTable::Add(), env, HashTable::Lookup(), NULL, and socketHashTable().
Referenced by deregisterSocket(), RTPInterface::setServerRequestAlternativeByteHandler(), and RTPInterface::startNetworkReading().
00080 { 00081 HashTable* table = socketHashTable(env, createIfNotFound); 00082 if (table == NULL) return NULL; 00083 00084 char const* key = (char const*)(long)sockNum; 00085 SocketDescriptor* socketDescriptor = (SocketDescriptor*)(table->Lookup(key)); 00086 if (socketDescriptor == NULL && createIfNotFound) { 00087 socketDescriptor = new SocketDescriptor(env, sockNum); 00088 table->Add((char const*)(long)(sockNum), socketDescriptor); 00089 } 00090 00091 return socketDescriptor; 00092 }
| static void removeSocketDescription | ( | UsageEnvironment & | env, | |
| int | sockNum | |||
| ) | [static] |
Definition at line 94 of file RTPInterface.cpp.
References env, _Tables::getOurTables(), HashTable::IsEmpty(), NULL, HashTable::Remove(), and socketHashTable().
Referenced by SocketDescriptor::deregisterRTPInterface().
00094 { 00095 char const* key = (char const*)(long)sockNum; 00096 HashTable* table = socketHashTable(env); 00097 table->Remove(key); 00098 00099 if (table->IsEmpty()) { 00100 // We can also delete the table (to reclaim space): 00101 _Tables* ourTables = _Tables::getOurTables(env); 00102 delete table; 00103 ourTables->socketTable = NULL; 00104 ourTables->reclaimIfPossible(); 00105 } 00106 }
| Boolean sendRTPOverTCP | ( | unsigned char * | packet, | |
| unsigned | packetSize, | |||
| int | socketNum, | |||
| unsigned char | streamChannelId | |||
| ) | [static] |
Definition at line 280 of file RTPInterface.cpp.
Referenced by RTPInterface::sendPacket().
00281 { 00282 #ifdef DEBUG 00283 fprintf(stderr, "sendRTPOverTCP: %d bytes over channel %d (socket %d)\n", 00284 packetSize, streamChannelId, socketNum); fflush(stderr); 00285 #endif 00286 // Send RTP over TCP, using the encoding defined in 00287 // RFC 2326, section 10.12: 00288 do { 00289 char const dollar = '$'; 00290 if (send(socketNum, &dollar, 1, 0) != 1) break; 00291 if (send(socketNum, (char*)&streamChannelId, 1, 0) != 1) break; 00292 00293 char netPacketSize[2]; 00294 netPacketSize[0] = (char) ((packetSize&0xFF00)>>8); 00295 netPacketSize[1] = (char) (packetSize&0xFF); 00296 if (send(socketNum, netPacketSize, 2, 0) != 2) break; 00297 00298 if (send(socketNum, (char*)packet, packetSize, 0) != (int)packetSize) break; 00299 00300 #ifdef DEBUG 00301 fprintf(stderr, "sendRTPOverTCP: completed\n"); fflush(stderr); 00302 #endif 00303 00304 return True; 00305 } while (0); 00306 00307 #ifdef DEBUG 00308 fprintf(stderr, "sendRTPOverTCP: failed!\n"); fflush(stderr); 00309 #endif 00310 return False; 00311 }
| static HashTable* socketHashTable | ( | UsageEnvironment & | env, | |
| Boolean | createIfNotPresent = True | |||
| ) | [static] |
Definition at line 40 of file RTPInterface.cpp.
References HashTable::create(), env, _Tables::getOurTables(), NULL, ONE_WORD_HASH_KEYS, and _Tables::socketTable.
Referenced by MediaSubsession::initiate(), lookupSocketDescriptor(), and removeSocketDescription().
00040 { 00041 _Tables* ourTables = _Tables::getOurTables(env, createIfNotPresent); 00042 if (ourTables == NULL) return NULL; 00043 00044 if (ourTables->socketTable == NULL) { 00045 // Create a new socket number -> SocketDescriptor mapping table: 00046 ourTables->socketTable = HashTable::create(ONE_WORD_HASH_KEYS); 00047 } 00048 return (HashTable*)(ourTables->socketTable); 00049 }
1.5.2