#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 150 of file RTPInterface.cpp.
References SocketDescriptor::deregisterRTPInterface(), env, False, lookupSocketDescriptor(), and NULL.
Referenced by RTPInterface::removeStreamSocket(), and RTPInterface::stopNetworkReading().
00150 { 00151 SocketDescriptor* socketDescriptor = lookupSocketDescriptor(env, sockNum, False); 00152 if (socketDescriptor != NULL) { 00153 socketDescriptor->deregisterRTPInterface(streamChannelId); 00154 // Note: This may delete "socketDescriptor", 00155 // if no more interfaces are using this socket 00156 } 00157 }
| 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 276 of file RTPInterface.cpp.
Referenced by RTPInterface::sendPacket().
00277 { 00278 #ifdef DEBUG 00279 fprintf(stderr, "sendRTPOverTCP: %d bytes over channel %d (socket %d)\n", 00280 packetSize, streamChannelId, socketNum); fflush(stderr); 00281 #endif 00282 // Send RTP over TCP, using the encoding defined in 00283 // RFC 2326, section 10.12: 00284 do { 00285 char const dollar = '$'; 00286 if (send(socketNum, &dollar, 1, 0) != 1) break; 00287 if (send(socketNum, (char*)&streamChannelId, 1, 0) != 1) break; 00288 00289 char netPacketSize[2]; 00290 netPacketSize[0] = (char) ((packetSize&0xFF00)>>8); 00291 netPacketSize[1] = (char) (packetSize&0xFF); 00292 if (send(socketNum, netPacketSize, 2, 0) != 2) break; 00293 00294 if (send(socketNum, (char*)packet, packetSize, 0) != (int)packetSize) break; 00295 00296 #ifdef DEBUG 00297 fprintf(stderr, "sendRTPOverTCP: completed\n"); fflush(stderr); 00298 #endif 00299 00300 return True; 00301 } while (0); 00302 00303 #ifdef DEBUG 00304 fprintf(stderr, "sendRTPOverTCP: failed!\n"); fflush(stderr); 00305 #endif 00306 return False; 00307 }
| 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