/** * Creates a pair of Secure-RTP/Secure-RTCP RtpTransport's. * oRTP relies on libsrtp (see http://srtp.sf.net ) for secure RTP encryption. * This function creates a RtpTransport object to be used to the RtpSession using * rtp_session_set_transport(). * @srtp: the srtp_t session to be used * **/ int srtp_transport_new(srtp_t srtp, RtpTransport **rtpt, RtpTransport **rtcpt ){ if (rtpt) { (*rtpt)=ortp_new(RtpTransport,1); (*rtpt)->data=srtp; (*rtpt)->t_getsocket=srtp_getsocket; (*rtpt)->t_sendto=srtp_sendto; (*rtpt)->t_recvfrom=srtp_recvfrom; } if (rtcpt) { (*rtcpt)=ortp_new(RtpTransport,1); (*rtcpt)->data=srtp; (*rtcpt)->t_getsocket=srtcp_getsocket; (*rtcpt)->t_sendto=srtcp_sendto; (*rtcpt)->t_recvfrom=srtcp_recvfrom; } return 0; }
int WIN_thread_create(ortp_thread_t *th, void *attr, void * (*func)(void *), void *data) { thread_param_t *params=ortp_new(thread_param_t,1); params->func=func; params->arg=data; *th=(HANDLE)_beginthreadex( NULL, 0, thread_starter, params, 0, NULL); return 0; }
RtpEndpoint *rtp_endpoint_new(struct sockaddr *addr, socklen_t addrlen){ RtpEndpoint *ep=ortp_new(RtpEndpoint,1); if (sizeof(ep->addr)<addrlen){ ortp_free(ep); ortp_fatal("Bad socklen_t size !"); return NULL; } memcpy(&ep->addr,addr,addrlen); ep->addrlen=addrlen; return ep; }
void ortp_logv(int level, const char *fmt, va_list args) { if ((ortp_logv_out != NULL) && ortp_log_level_enabled(level)) { if (__log_thread_id == 0) { ortp_logv_out(level, fmt, args); } else if (__log_thread_id == ortp_thread_self()) { ortp_logv_flush(); ortp_logv_out(level, fmt, args); } else { ortp_stored_log_t *l = ortp_new(ortp_stored_log_t, 1); l->level = level; l->msg = ortp_strdup_vprintf(fmt, args); ortp_mutex_lock(&__log_stored_messages_mutex); __log_stored_messages_list = o_list_append(__log_stored_messages_list, l); ortp_mutex_unlock(&__log_stored_messages_mutex); } } #if !defined(_WIN32_WCE) if (level == ORTP_FATAL) abort(); #endif }
void *ortp_shm_open(unsigned int keyid, int size, int create){ HANDLE h; char name[64]; void *buf; snprintf(name,sizeof(name),"%x",keyid); if (create){ h = CreateFileMapping( INVALID_HANDLE_VALUE, // use paging file NULL, // default security PAGE_READWRITE, // read/write access 0, // maximum object size (high-order DWORD) size, // maximum object size (low-order DWORD) name); // name of mapping object }else{ h = OpenFileMapping( FILE_MAP_ALL_ACCESS, // read/write access FALSE, // do not inherit the name name); // name of mapping object } if (h==(HANDLE)-1) { ortp_error("Fail to open file mapping (create=%i)",create); return NULL; } buf = (LPTSTR) MapViewOfFile(h, // handle to map object FILE_MAP_ALL_ACCESS, // read/write permission 0, 0, size); if (buf!=NULL){ MapInfo *i=(MapInfo*)ortp_new(MapInfo,1); i->h=h; i->mem=buf; maplist=o_list_append(maplist,i); }else{ CloseHandle(h); ortp_error("MapViewOfFile failed"); } return buf; }
OrtpEvQueue * ortp_ev_queue_new(){ OrtpEvQueue *q=ortp_new(OrtpEvQueue,1); qinit(&q->q); ortp_mutex_init(&q->mutex,NULL); return q; }