C_RESULT video_com_stage_connect (video_com_config_t *cfg) { #ifdef _WIN32 int timeout_for_windows=1000; /* timeout in milliseconds */ int sizeinit; #else struct timeval tv; // 1 second timeout tv.tv_sec = 1; tv.tv_usec = 0; #endif C_RESULT res = C_FAIL; if (TRUE == cfg->connected) { PDBG ("Will close"); res = vp_com_close (cfg->com, &cfg->socket); cfg->connected = FALSE; if (VP_FAILED (res)) { PDBG ("Close failed"); return res; } } if( cfg->protocol == VP_COM_PROBE) { PRINT("\n\nPROBING\n"); cfg->socket.protocol = VP_COM_TCP; res = vp_com_open(cfg->com, &cfg->socket, &cfg->read, &cfg->write); if( VP_SUCCEEDED(res) ) { PRINT("\n\nTCP\n"); vp_com_close (cfg->com, &cfg->socket); cfg->protocol = VP_COM_TCP; } else { PRINT("\n\nUDP\n"); cfg->protocol = VP_COM_UDP; } } if( cfg->protocol == VP_COM_UDP ) { cfg->socket.protocol = VP_COM_UDP; cfg->socket.is_multicast = 0; // disable multicast for video cfg->socket.multicast_base_addr = MULTICAST_BASE_ADDR; res = vp_com_open(cfg->com, &cfg->socket, &cfg->read, &cfg->write); if( VP_SUCCEEDED(res) ) { int numi= 1; socklen_t numi1= sizeof(int); #ifdef _WIN32 setsockopt((int32_t)cfg->socket.priv, SOL_SOCKET, SO_RCVTIMEO, SSOPTCAST_RO(&timeout_for_windows), sizeof(timeout_for_windows)); #else setsockopt((int32_t)cfg->socket.priv, SOL_SOCKET, SO_RCVTIMEO, SSOPTCAST_RO(&tv), sizeof(tv)); #endif // Increase buffer for receiving datas. setsockopt( (int32_t)cfg->socket.priv, SOL_SOCKET, SO_DEBUG, SSOPTCAST_RO(&numi), sizeof(numi)); numi = SOCKET_BUFFER_SIZE; setsockopt( (int32_t)cfg->socket.priv, SOL_SOCKET, SO_RCVBUF, SSOPTCAST_RO(&numi),numi1); getsockopt( (int32_t)cfg->socket.priv, SOL_SOCKET, SO_RCVBUF, SSOPTCAST_RW(&numi),&numi1); PDBG ("New buffer size : %d", numi); numi1 = 0; setsockopt( (int32_t)cfg->socket.priv, SOL_SOCKET, SO_DEBUG, SSOPTCAST_RO(&numi1), sizeof(numi1)); cfg->connected = TRUE; } } else if( cfg->protocol == VP_COM_TCP ) { PDBG ("Will open TCP"); res = vp_com_open(cfg->com, &cfg->socket, &cfg->read, &cfg->write); if( VP_SUCCEEDED(res) ) { int numi= 1; socklen_t numi1= sizeof(int); PDBG ("Success open"); vp_com_sockopt(cfg->com, &cfg->socket, cfg->sockopt); #ifdef _WIN32 setsockopt((int32_t)cfg->socket.priv, SOL_SOCKET, SO_RCVTIMEO, SSOPTCAST_RO(&timeout_for_windows), sizeof(timeout_for_windows)); #else setsockopt((int32_t)cfg->socket.priv, SOL_SOCKET, SO_RCVTIMEO, SSOPTCAST_RO(&tv), sizeof(tv)); #endif // Increase buffer for receiving datas. setsockopt( (int32_t)cfg->socket.priv, SOL_SOCKET, SO_DEBUG, SSOPTCAST_RO(&numi), sizeof(numi)); numi = SOCKET_BUFFER_SIZE; setsockopt( (int32_t)cfg->socket.priv, SOL_SOCKET, SO_RCVBUF, SSOPTCAST_RO(&numi),numi1); getsockopt( (int32_t)cfg->socket.priv, SOL_SOCKET, SO_RCVBUF, SSOPTCAST_RW(&numi),&numi1); PDBG ("NEW buffer size : %d", numi); numi1 = 0; setsockopt( (int32_t)cfg->socket.priv, SOL_SOCKET, SO_DEBUG, SSOPTCAST_RO(&numi1), sizeof(numi1)); cfg->connected = TRUE; } } #ifdef _WIN32 sizeinit = strlen("Init"); vp_com_write_socket(&cfg->socket,"Init",&sizeinit); #endif return res; }
C_RESULT video_com_stage_open(video_com_config_t *cfg) { #ifdef _WIN32 int sizeinit; #endif C_RESULT res = C_FAIL; if( cfg->protocol == VP_COM_UDP ) { struct timeval tv; #ifdef _WIN32 int timeout_for_windows=1000; /* timeout in milliseconds */ #endif // 1 second timeout tv.tv_sec = 1; tv.tv_usec = 0; cfg->socket.protocol = VP_COM_UDP; cfg->socket.is_multicast = 0; // enable multicast for video cfg->socket.multicast_base_addr = MULTICAST_BASE_ADDR; res = vp_com_open(cfg->com, &cfg->socket, &cfg->read, &cfg->write); if( VP_SUCCEEDED(res) ) { int numi= 1; socklen_t numi1= sizeof(int); #ifdef _WIN32 setsockopt((int32_t)cfg->socket.priv, SOL_SOCKET, SO_RCVTIMEO, SSOPTCAST_RO(&timeout_for_windows), sizeof(timeout_for_windows)); #else setsockopt((int32_t)cfg->socket.priv, SOL_SOCKET, SO_RCVTIMEO, SSOPTCAST_RO(&tv), sizeof(tv)); #endif // Increase buffer for receiving datas. setsockopt( (int32_t)cfg->socket.priv, SOL_SOCKET, SO_DEBUG, SSOPTCAST_RO(&numi), sizeof(numi)); numi= 256*256; setsockopt( (int32_t)cfg->socket.priv, SOL_SOCKET, SO_RCVBUF, SSOPTCAST_RO(&numi),numi1); getsockopt( (int32_t)cfg->socket.priv, SOL_SOCKET, SO_RCVBUF, SSOPTCAST_RW(&numi),&numi1); numi1=0; setsockopt( (int32_t)cfg->socket.priv, SOL_SOCKET, SO_DEBUG, SSOPTCAST_RO(&numi1), sizeof(numi1)); } } else if( cfg->protocol == VP_COM_TCP ) { res = vp_com_open(cfg->com, &cfg->socket, &cfg->read, &cfg->write); if( VP_SUCCEEDED(res) ) { vp_com_sockopt(cfg->com, &cfg->socket, cfg->sockopt); } } /* Stephane */ #ifdef _WIN32 sizeinit = strlen("Init"); vp_com_write_socket(&cfg->socket,"Init",&sizeinit); #endif return res; }