PJ_DEF(void) pj_activesock_set_iphone_os_bg(pj_activesock_t *asock, int val) { asock->bg_setting = val; if (asock->bg_setting) activesock_create_iphone_os_stream(asock); else activesock_destroy_iphone_os_stream(asock); }
static void activesock_create_iphone_os_stream(pj_activesock_t *asock) { if (ios_bg_support && asock->bg_setting && asock->stream_oriented) { activesock_destroy_iphone_os_stream(asock); CFStreamCreatePairWithSocket(kCFAllocatorDefault, asock->sock, &asock->readStream, NULL); if (!asock->readStream || CFReadStreamSetProperty(asock->readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP) != TRUE || CFReadStreamOpen(asock->readStream) != TRUE) { PJ_LOG(2,("", "Failed to configure TCP transport for VoIP " "usage. Background mode will not be supported.")); activesock_destroy_iphone_os_stream(asock); } } }
PJ_DEF(pj_status_t) pj_activesock_close(pj_activesock_t *asock) { PJ_ASSERT_RETURN(asock, PJ_EINVAL); if (asock->key) { #if defined(PJ_IPHONE_OS_HAS_MULTITASKING_SUPPORT) && \ PJ_IPHONE_OS_HAS_MULTITASKING_SUPPORT!=0 activesock_destroy_iphone_os_stream(asock); #endif pj_ioqueue_unregister(asock->key); asock->key = NULL; } return PJ_SUCCESS; }