Index: addons/ooh323c/src/ooh323.c =================================================================== --- addons/ooh323c/src/ooh323.c (revision 303455) +++ addons/ooh323c/src/ooh323.c (working copy) @@ -1980,6 +1980,7 @@ int ooHandleStartH245FacilityMessage OOTRACEINFO3("INFO: H.245 connection already established with remote" " endpoint (%s, %s)\n", call->callType, call->callToken); } + ooSendTCSandMSD(call); return OO_OK; } Index: addons/ooh323c/src/ooh245.c =================================================================== --- addons/ooh323c/src/ooh245.c (revision 303455) +++ addons/ooh323c/src/ooh245.c (working copy) @@ -2060,14 +2060,12 @@ int ooHandleH245Command(OOH323CallData *call, } } ooCloseH245Connection(call); + if (call->callState < OO_CALL_CLEAR) + call->callState = OO_CALL_CLEAR; } else{ call->h245SessionState = OO_H245SESSION_ENDRECVD; -#if 0 - if(call->callState < OO_CALL_CLEAR) - call->callState = OO_CALL_CLEAR; -#else if(call->logicalChans) { OOTRACEINFO3("In response to received EndSessionCommand - " @@ -2076,7 +2074,6 @@ int ooHandleH245Command(OOH323CallData *call, ooClearAllLogicalChannels(call); } ooSendEndSessionCommand(call); -#endif } Index: addons/ooh323c/src/ooSocket.c =================================================================== --- addons/ooh323c/src/ooSocket.c (revision 303455) +++ addons/ooh323c/src/ooSocket.c (working copy) @@ -191,7 +191,7 @@ typedef socklen_t OOSOCKLEN; int ooSocketCreate (OOSOCKET* psocket) { int on; - + int keepalive = 1, keepcnt = 24, keepidle = 120, keepintvl = 30; struct linger linger; OOSOCKET sock = socket (AF_INET, SOCK_STREAM, @@ -217,6 +217,11 @@ int ooSocketCreate (OOSOCKET* psocket) OOTRACEERR1("Error:Failed to set socket option linger\n"); return ASN_E_INVSOCKET; } + setsockopt (sock, SOL_SOCKET, SO_KEEPALIVE, (const char *)&keepalive, + sizeof(keepalive)); + setsockopt (sock, SOL_TCP, TCP_KEEPCNT, &keepcnt, sizeof(keepcnt)); + setsockopt (sock, SOL_TCP, TCP_KEEPIDLE, &keepidle, sizeof(keepidle)); + setsockopt (sock, SOL_TCP, TCP_KEEPINTVL, &keepintvl, sizeof(keepintvl)); *psocket = sock; return ASN_OK; } Index: addons/ooh323c/src/oochannels.c =================================================================== --- addons/ooh323c/src/oochannels.c (revision 303455) +++ addons/ooh323c/src/oochannels.c (working copy) @@ -139,13 +139,13 @@ int ooCreateH245Connection(OOH323CallData *call) call->callType, call->callToken); /*Start terminal capability exchange and master slave determination */ - ret = ooSendTermCapMsg(call); + /* ret = ooSendTermCapMsg(call); if(ret != OO_OK) { OOTRACEERR3("ERROR:Sending Terminal capability message (%s, %s)\n", call->callType, call->callToken); return ret; - } + } */ } else { @@ -475,13 +475,13 @@ int ooAcceptH245Connection(OOH323CallData *call) /* Start terminal capability exchange and master slave determination */ - ret = ooSendTermCapMsg(call); + /* ret = ooSendTermCapMsg(call); if(ret != OO_OK) { OOTRACEERR3("ERROR:Sending Terminal capability message (%s, %s)\n", call->callType, call->callToken); return ret; - } + } */ return OO_OK; } @@ -1835,6 +1835,8 @@ int ooOnSendMsg } else{ ooCloseH245Connection(call); + if(call->callState < OO_CALL_CLEAR) + call->callState = OO_CALL_CLEAR; } break; case OOCloseLogicalChannel: Index: addons/ooh323c/src/ooq931.c =================================================================== --- addons/ooh323c/src/ooq931.c (revision 303455) +++ addons/ooh323c/src/ooq931.c (working copy) @@ -1451,7 +1451,7 @@ int ooSendAlerting(OOH323CallData *call) OOTRACEERR3("Error: Failed to enqueue Alerting message to outbound queue. (%s, %s)\n", call->callType, call->callToken); } - ooSendTCSandMSD(call); + /* ooSendTCSandMSD(call); */ memReset (call->msgctxt); return ret; @@ -1588,7 +1588,7 @@ int ooSendProgress(OOH323CallData *call) if (!OO_TESTFLAG(call->flags, OO_M_TUNNELING) && call->h245listener) ooSendStartH245Facility(call); - ooSendTCSandMSD(call); + /* ooSendTCSandMSD(call); */ memReset (call->msgctxt); return ret; @@ -1932,7 +1932,10 @@ int ooAcceptCall(OOH323CallData *call) vendor->versionId.numocts); } - if (!call->fsSent) { + /* fix me */ + /* we will send fs propagation regardless on fsSent for H.323v2 ep's only */ + /* May 20110125 */ + if (!call->fsSent || 1) { ret = ooSetFastStartResponse(call, q931msg, &connect->fastStart.n, &connect->fastStart.elem); if(ret != ASN_OK) { return ret; } @@ -1962,7 +1965,8 @@ int ooAcceptCall(OOH323CallData *call) if (/* (!OO_TESTFLAG(call->flags, OO_M_FASTSTART) || call->remoteFastStartOLCs.count == 0) && */ !OO_TESTFLAG (call->flags, OO_M_TUNNELING) && - !call->h245listener && ooCreateH245Listener(call) == OO_OK) + ( (!call->h245listener && ooCreateH245Listener(call) == OO_OK) || + !call->pH245Channel)) { connect->m.h245AddressPresent = TRUE; connect->h245Address.t = T_H225TransportAddress_ipAddress; @@ -1997,6 +2001,7 @@ int ooAcceptCall(OOH323CallData *call) return OO_FAILED; } /* memReset(&gH323ep.msgctxt); */ + ooSendTCSandMSD(call); memReset(call->msgctxt); call->callState = OO_CALL_CONNECTED;