aboutsummaryrefslogtreecommitdiffstats
path: root/addons/ooh323c/src/ooh245.c
diff options
context:
space:
mode:
Diffstat (limited to 'addons/ooh323c/src/ooh245.c')
-rw-r--r--addons/ooh323c/src/ooh245.c437
1 files changed, 305 insertions, 132 deletions
diff --git a/addons/ooh323c/src/ooh245.c b/addons/ooh323c/src/ooh245.c
index 687e07eb5..940b8d838 100644
--- a/addons/ooh323c/src/ooh245.c
+++ b/addons/ooh323c/src/ooh245.c
@@ -1559,7 +1559,8 @@ int ooHandleOpenLogicalChannel_helper(OOH323CallData *call,
H245H2250LogicalChannelAckParameters *h2250lcap=NULL;
OOCTXT *pctxt;
H245UnicastAddress *unicastAddrs, *unicastAddrs1;
- H245UnicastAddress_iPAddress *iPAddress, *iPAddress1;
+ H245UnicastAddress_iPAddress *iPAddress = NULL, *iPAddress1 = NULL;
+ H245UnicastAddress_iP6Address *iP6Address = NULL, *iP6Address1 = NULL;
ooLogicalChannel *pLogicalChannel = NULL;
H245H2250LogicalChannelParameters *h2250lcp=NULL;
H245OpenLogicalChannel_forwardLogicalChannelParameters *flcp =
@@ -1637,11 +1638,20 @@ int ooHandleOpenLogicalChannel_helper(OOH323CallData *call,
unicastAddrs = h2250lcap->mediaChannel.u.unicastAddress;
memset(unicastAddrs, 0, sizeof(H245UnicastAddress));
- unicastAddrs->t = T_H245UnicastAddress_iPAddress;
- unicastAddrs->u.iPAddress = (H245UnicastAddress_iPAddress*)
+
+ if (call->versionIP == 6) {
+ unicastAddrs->t = T_H245UnicastAddress_iP6Address;
+ unicastAddrs->u.iP6Address = (H245UnicastAddress_iP6Address*)
+ memAlloc(pctxt, sizeof(H245UnicastAddress_iP6Address));
+ iP6Address = unicastAddrs->u.iP6Address;
+ memset(iP6Address, 0, sizeof(H245UnicastAddress_iP6Address));
+ } else {
+ unicastAddrs->t = T_H245UnicastAddress_iPAddress;
+ unicastAddrs->u.iPAddress = (H245UnicastAddress_iPAddress*)
memAlloc(pctxt, sizeof(H245UnicastAddress_iPAddress));
- iPAddress = unicastAddrs->u.iPAddress;
- memset(iPAddress, 0, sizeof(H245UnicastAddress_iPAddress));
+ iPAddress = unicastAddrs->u.iPAddress;
+ memset(iPAddress, 0, sizeof(H245UnicastAddress_iPAddress));
+ }
pLogicalChannel = ooAddNewLogicalChannel(call,
olc->forwardLogicalChannelNumber, h2250lcap->sessionID,
@@ -1652,10 +1662,16 @@ int ooHandleOpenLogicalChannel_helper(OOH323CallData *call,
"(%s, %s)\n", call->callType, call->callToken);
return OO_FAILED;
}
- ooSocketConvertIpToNwAddr(call->localIP, iPAddress->network.data);
- iPAddress->network.numocts = 4;
- iPAddress->tsapIdentifier = pLogicalChannel->localRtpPort;
+ if (call->versionIP == 6) {
+ inet_pton(AF_INET6, call->localIP, iP6Address->network.data);
+ iP6Address->network.numocts = 16;
+ iP6Address->tsapIdentifier = pLogicalChannel->localRtpPort;
+ } else {
+ inet_pton(AF_INET, call->localIP, iPAddress->network.data);
+ iPAddress->network.numocts = 4;
+ iPAddress->tsapIdentifier = pLogicalChannel->localRtpPort;
+ }
/* media contrcol channel */
h2250lcap->mediaControlChannel.t =
@@ -1664,17 +1680,28 @@ int ooHandleOpenLogicalChannel_helper(OOH323CallData *call,
ASN1MALLOC(pctxt, sizeof(H245UnicastAddress));
unicastAddrs1 = h2250lcap->mediaControlChannel.u.unicastAddress;
- memset(unicastAddrs1, 0, sizeof(H245UnicastAddress));
- unicastAddrs1->t = T_H245UnicastAddress_iPAddress;
- unicastAddrs1->u.iPAddress = (H245UnicastAddress_iPAddress*)
- memAlloc(pctxt, sizeof(H245UnicastAddress_iPAddress));
- iPAddress1 = unicastAddrs1->u.iPAddress;
- memset(iPAddress1, 0, sizeof(H245UnicastAddress_iPAddress));
- ooSocketConvertIpToNwAddr(call->localIP, iPAddress1->network.data);
+ memset(unicastAddrs1, 0, sizeof(H245UnicastAddress));
+ if (call->versionIP == 6) {
+ unicastAddrs1->t = T_H245UnicastAddress_iP6Address;
+ unicastAddrs1->u.iP6Address = (H245UnicastAddress_iP6Address*)
+ memAlloc(pctxt, sizeof(H245UnicastAddress_iP6Address));
+ iP6Address1 = unicastAddrs1->u.iP6Address;
+ memset(iP6Address1, 0, sizeof(H245UnicastAddress_iP6Address));
+ inet_pton(AF_INET6, call->localIP, iP6Address1->network.data);
+ iP6Address1->network.numocts = 16;
+ iP6Address1->tsapIdentifier = pLogicalChannel->localRtcpPort;
+ } else {
+ unicastAddrs1->t = T_H245UnicastAddress_iPAddress;
+ unicastAddrs1->u.iPAddress = (H245UnicastAddress_iPAddress*)
+ memAlloc(pctxt, sizeof(H245UnicastAddress_iPAddress));
+ iPAddress1 = unicastAddrs1->u.iPAddress;
+ memset(iPAddress1, 0, sizeof(H245UnicastAddress_iPAddress));
- iPAddress1->network.numocts = 4;
- iPAddress1->tsapIdentifier = pLogicalChannel->localRtcpPort;
+ inet_pton(AF_INET, call->localIP, iPAddress1->network.data);
+ iPAddress1->network.numocts = 4;
+ iPAddress1->tsapIdentifier = pLogicalChannel->localRtcpPort;
+ }
OOTRACEDBGA3("Built OpenLogicalChannelAck (%s, %s)\n", call->callType,
call->callToken);
@@ -1765,14 +1792,16 @@ int ooSendOpenLogicalChannelReject
int ooOnReceivedOpenLogicalChannelAck(OOH323CallData *call,
H245OpenLogicalChannelAck *olcAck)
{
- char remoteip[20];
+ char remoteip[2+8*4+7];
regmatch_t pmatch[1];
ooLogicalChannel *pLogicalChannel;
H245H2250LogicalChannelAckParameters *h2250lcap;
H245UnicastAddress *unicastAddr;
- H245UnicastAddress_iPAddress *iPAddress;
+ H245UnicastAddress_iPAddress *iPAddress = NULL;
+ H245UnicastAddress_iP6Address *iP6Address = NULL;
H245UnicastAddress *unicastAddr1;
H245UnicastAddress_iPAddress *iPAddress1 = NULL;
+ H245UnicastAddress_iP6Address *iP6Address1 = NULL;
if(!((olcAck->m.forwardMultiplexAckParametersPresent == 1) &&
(olcAck->forwardMultiplexAckParameters.t ==
@@ -1802,19 +1831,28 @@ int ooOnReceivedOpenLogicalChannelAck(OOH323CallData *call,
}
unicastAddr = h2250lcap->mediaChannel.u.unicastAddress;
- if(unicastAddr->t != T_H245UnicastAddress_iPAddress)
- {
- OOTRACEERR3("Error: Processing OpenLogicalChannelAck - media channel "
+ if (call->versionIP == 6) {
+ if(unicastAddr->t != T_H245UnicastAddress_iP6Address)
+ {
+ OOTRACEERR3("Error: Processing OpenLogicalChannelAck - media channel "
+ "address type is not IP6 (%s, %s)\n", call->callType,
+ call->callToken);
+ return OO_FAILED;
+ }
+ iP6Address = unicastAddr->u.iP6Address;
+ inet_ntop(AF_INET6, iP6Address->network.data, remoteip, sizeof(remoteip));
+
+ } else {
+ if(unicastAddr->t != T_H245UnicastAddress_iPAddress)
+ {
+ OOTRACEERR3("Error: Processing OpenLogicalChannelAck - media channel "
"address type is not IP (%s, %s)\n", call->callType,
call->callToken);
- return OO_FAILED;
+ return OO_FAILED;
+ }
+ iPAddress = unicastAddr->u.iPAddress;
+ inet_ntop(AF_INET, iPAddress->network.data, remoteip, sizeof(remoteip));
}
- iPAddress = unicastAddr->u.iPAddress;
-
- sprintf(remoteip,"%d.%d.%d.%d", iPAddress->network.data[0],
- iPAddress->network.data[1],
- iPAddress->network.data[2],
- iPAddress->network.data[3]);
/* Extract media control channel address */
if(h2250lcap->m.mediaControlChannelPresent == 1) {
@@ -1828,14 +1866,23 @@ int ooOnReceivedOpenLogicalChannelAck(OOH323CallData *call,
}
unicastAddr1 = h2250lcap->mediaControlChannel.u.unicastAddress;
- if(unicastAddr1->t != T_H245UnicastAddress_iPAddress) {
- OOTRACEERR3("Error: Processing OpenLogicalChannelAck - media control "
- "channel address type is not IP (%s, %s)\n", call->callType,
- call->callToken);
- return OO_FAILED;
- }
-
- iPAddress1 = unicastAddr1->u.iPAddress;
+ if (call->versionIP == 6) {
+ if(unicastAddr1->t != T_H245UnicastAddress_iP6Address) {
+ OOTRACEERR3("Error: Processing OpenLogicalChannelAck - media control "
+ "channel address type is not IP6 (%s, %s)\n", call->callType,
+ call->callToken);
+ return OO_FAILED;
+ }
+ iP6Address1 = unicastAddr1->u.iP6Address;
+ } else {
+ if(unicastAddr1->t != T_H245UnicastAddress_iPAddress) {
+ OOTRACEERR3("Error: Processing OpenLogicalChannelAck - media control "
+ "channel address type is not IP (%s, %s)\n", call->callType,
+ call->callToken);
+ return OO_FAILED;
+ }
+ iPAddress1 = unicastAddr1->u.iPAddress;
+ }
} else {
OOTRACEDBGA3("Warning: Processing OpenLogicalChannelAck - Missing media "
"control channel (%s, %s)\n", call->callType, call->callToken);
@@ -1870,10 +1917,15 @@ int ooOnReceivedOpenLogicalChannelAck(OOH323CallData *call,
}
strcpy(pLogicalChannel->remoteIP, remoteip);
- pLogicalChannel->remoteMediaPort = iPAddress->tsapIdentifier;
- if (iPAddress1)
- pLogicalChannel->remoteMediaControlPort = iPAddress1->tsapIdentifier;
-
+ if (call->versionIP == 6) {
+ pLogicalChannel->remoteMediaPort = iP6Address->tsapIdentifier;
+ if (iP6Address1)
+ pLogicalChannel->remoteMediaControlPort = iP6Address1->tsapIdentifier;
+ } else {
+ pLogicalChannel->remoteMediaPort = iPAddress->tsapIdentifier;
+ if (iPAddress1)
+ pLogicalChannel->remoteMediaControlPort = iPAddress1->tsapIdentifier;
+ }
if(pLogicalChannel->chanCap->startTransmitChannel)
{
pLogicalChannel->chanCap->startTransmitChannel(call, pLogicalChannel);
@@ -3613,6 +3665,7 @@ int ooOpenChannel(OOH323CallData* call, ooH323EpCapability *epCap)
H245H2250LogicalChannelParameters *h2250lcp = NULL;
H245UnicastAddress *unicastAddrs = NULL;
H245UnicastAddress_iPAddress *iPAddress = NULL;
+ H245UnicastAddress_iP6Address *iP6Address = NULL;
unsigned session_id=0;
ooLogicalChannel *pLogicalChannel = NULL;
@@ -3756,16 +3809,27 @@ int ooOpenChannel(OOH323CallData* call, ooH323EpCapability *epCap)
unicastAddrs = h2250lcp->mediaControlChannel.u.unicastAddress;
memset(unicastAddrs, 0, sizeof(H245UnicastAddress));
- unicastAddrs->t = T_H245UnicastAddress_iPAddress;
- unicastAddrs->u.iPAddress = (H245UnicastAddress_iPAddress*)
+ if (call->versionIP == 6) {
+ unicastAddrs->t = T_H245UnicastAddress_iP6Address;
+ unicastAddrs->u.iP6Address = (H245UnicastAddress_iP6Address*)
+ ASN1MALLOC(pctxt, sizeof(H245UnicastAddress_iP6Address));
+ iP6Address = unicastAddrs->u.iP6Address;
+ memset(iP6Address, 0, sizeof(H245UnicastAddress_iP6Address));
+
+ inet_pton(AF_INET6, pLogicalChannel->localIP, iP6Address->network.data);
+ iP6Address->network.numocts = 16;
+ iP6Address->tsapIdentifier = pLogicalChannel->localRtcpPort;
+ } else {
+ unicastAddrs->t = T_H245UnicastAddress_iPAddress;
+ unicastAddrs->u.iPAddress = (H245UnicastAddress_iPAddress*)
ASN1MALLOC(pctxt, sizeof(H245UnicastAddress_iPAddress));
- iPAddress = unicastAddrs->u.iPAddress;
- memset(iPAddress, 0, sizeof(H245UnicastAddress_iPAddress));
-
- ooSocketConvertIpToNwAddr(pLogicalChannel->localIP,iPAddress->network.data);
+ iPAddress = unicastAddrs->u.iPAddress;
+ memset(iPAddress, 0, sizeof(H245UnicastAddress_iPAddress));
- iPAddress->network.numocts = 4;
- iPAddress->tsapIdentifier = pLogicalChannel->localRtcpPort;
+ inet_pton(AF_INET, pLogicalChannel->localIP, iPAddress->network.data);
+ iPAddress->network.numocts = 4;
+ iPAddress->tsapIdentifier = pLogicalChannel->localRtcpPort;
+ }
pLogicalChannel->state = OO_LOGICALCHAN_PROPOSED;
OOTRACEDBGA4("Built OpenLogicalChannel-%s (%s, %s)\n",
ooGetCapTypeText(epCap->cap), call->callType,
@@ -3798,6 +3862,7 @@ int ooBuildFastStartOLC
H245H2250LogicalChannelParameters *pH2250lcp1=NULL, *pH2250lcp2=NULL;
H245UnicastAddress *pUnicastAddrs=NULL, *pUniAddrs=NULL;
H245UnicastAddress_iPAddress *pIpAddrs=NULL, *pUniIpAddrs=NULL;
+ H245UnicastAddress_iP6Address *pIp6Addrs=NULL, *pUniIp6Addrs=NULL;
unsigned session_id = 0;
ooLogicalChannel *pLogicalChannel = NULL;
int outgoing=FALSE;
@@ -3880,17 +3945,29 @@ int ooBuildFastStartOLC
sizeof(H245UnicastAddress));
memset(pUniAddrs, 0, sizeof(H245UnicastAddress));
pH2250lcp1->mediaChannel.u.unicastAddress = pUniAddrs;
- pUniAddrs->t = T_H245UnicastAddress_iPAddress;
- pUniIpAddrs = (H245UnicastAddress_iPAddress*) ASN1MALLOC(pctxt,
+ if (call->versionIP == 6) {
+ pUniAddrs->t = T_H245UnicastAddress_iP6Address;
+ pUniIp6Addrs = (H245UnicastAddress_iP6Address*) ASN1MALLOC(pctxt,
+ sizeof(H245UnicastAddress_iP6Address));
+ memset(pUniIp6Addrs, 0, sizeof(H245UnicastAddress_iP6Address));
+ pUniAddrs->u.iP6Address = pUniIp6Addrs;
+
+ inet_pton(AF_INET6, pLogicalChannel->localIP, pUniIp6Addrs->network.data);
+
+ pUniIp6Addrs->network.numocts = 16;
+ pUniIp6Addrs->tsapIdentifier = pLogicalChannel->localRtpPort;
+ } else {
+ pUniAddrs->t = T_H245UnicastAddress_iPAddress;
+ pUniIpAddrs = (H245UnicastAddress_iPAddress*) ASN1MALLOC(pctxt,
sizeof(H245UnicastAddress_iPAddress));
- memset(pUniIpAddrs, 0, sizeof(H245UnicastAddress_iPAddress));
- pUniAddrs->u.iPAddress = pUniIpAddrs;
+ memset(pUniIpAddrs, 0, sizeof(H245UnicastAddress_iPAddress));
+ pUniAddrs->u.iPAddress = pUniIpAddrs;
- ooSocketConvertIpToNwAddr(pLogicalChannel->localIP,
- pUniIpAddrs->network.data);
+ inet_pton(AF_INET, pLogicalChannel->localIP, pUniIpAddrs->network.data);
- pUniIpAddrs->network.numocts = 4;
- pUniIpAddrs->tsapIdentifier = pLogicalChannel->localRtpPort;
+ pUniIpAddrs->network.numocts = 4;
+ pUniIpAddrs->tsapIdentifier = pLogicalChannel->localRtpPort;
+ }
}
pH2250lcp1->m.mediaControlChannelPresent = 1;
pH2250lcp1->mediaControlChannel.t =
@@ -3899,17 +3976,30 @@ int ooBuildFastStartOLC
sizeof(H245UnicastAddress));
memset(pUnicastAddrs, 0, sizeof(H245UnicastAddress));
pH2250lcp1->mediaControlChannel.u.unicastAddress = pUnicastAddrs;
- pUnicastAddrs->t = T_H245UnicastAddress_iPAddress;
- pIpAddrs = (H245UnicastAddress_iPAddress*) ASN1MALLOC(pctxt,
+ if (call->versionIP == 6) {
+ pUnicastAddrs->t = T_H245UnicastAddress_iP6Address;
+ pIp6Addrs = (H245UnicastAddress_iP6Address*) ASN1MALLOC(pctxt,
+ sizeof(H245UnicastAddress_iP6Address));
+ memset(pIp6Addrs, 0, sizeof(H245UnicastAddress_iP6Address));
+ pUnicastAddrs->u.iP6Address = pIp6Addrs;
+
+ inet_pton(AF_INET6, pLogicalChannel->localIP, pIp6Addrs->network.data);
+
+ pIp6Addrs->network.numocts = 16;
+ pIp6Addrs->tsapIdentifier = pLogicalChannel->localRtcpPort;
+ } else {
+ pUnicastAddrs->t = T_H245UnicastAddress_iPAddress;
+ pIpAddrs = (H245UnicastAddress_iPAddress*) ASN1MALLOC(pctxt,
sizeof(H245UnicastAddress_iPAddress));
- memset(pIpAddrs, 0, sizeof(H245UnicastAddress_iPAddress));
- pUnicastAddrs->u.iPAddress = pIpAddrs;
+ memset(pIpAddrs, 0, sizeof(H245UnicastAddress_iPAddress));
+ pUnicastAddrs->u.iPAddress = pIpAddrs;
- ooSocketConvertIpToNwAddr(pLogicalChannel->localIP,
- pIpAddrs->network.data);
+ inet_pton(AF_INET, pLogicalChannel->localIP, pIpAddrs->network.data);
+
+ pIpAddrs->network.numocts = 4;
+ pIpAddrs->tsapIdentifier = pLogicalChannel->localRtcpPort;
+ }
- pIpAddrs->network.numocts = 4;
- pIpAddrs->tsapIdentifier = pLogicalChannel->localRtcpPort;
if(!outgoing)
{
if(epCap->startReceiveChannel)
@@ -3972,18 +4062,33 @@ int ooBuildFastStartOLC
sizeof(H245UnicastAddress));
memset(pUnicastAddrs, 0, sizeof(H245UnicastAddress));
pH2250lcp2->mediaChannel.u.unicastAddress = pUnicastAddrs;
+
+ /* May 20101022 */
- pUnicastAddrs->t = T_H245UnicastAddress_iPAddress;
- pIpAddrs = (H245UnicastAddress_iPAddress*) memAlloc(pctxt,
+ if (call->versionIP == 6) {
+ pUnicastAddrs->t = T_H245UnicastAddress_iP6Address;
+ pIp6Addrs = (H245UnicastAddress_iP6Address*) ASN1MALLOC(pctxt,
+ sizeof(H245UnicastAddress_iP6Address));
+ memset(pIp6Addrs, 0, sizeof(H245UnicastAddress_iP6Address));
+ pUnicastAddrs->u.iP6Address = pIp6Addrs;
+
+ inet_pton(AF_INET6, pLogicalChannel->localIP, pIp6Addrs->network.data);
+
+ pIp6Addrs->network.numocts = 16;
+ pIp6Addrs->tsapIdentifier = pLogicalChannel->localRtpPort;
+ } else {
+ pUnicastAddrs->t = T_H245UnicastAddress_iPAddress;
+ pIpAddrs = (H245UnicastAddress_iPAddress*) ASN1MALLOC(pctxt,
sizeof(H245UnicastAddress_iPAddress));
- memset(pIpAddrs, 0, sizeof(H245UnicastAddress_iPAddress));
- pUnicastAddrs->u.iPAddress = pIpAddrs;
+ memset(pIpAddrs, 0, sizeof(H245UnicastAddress_iPAddress));
+ pUnicastAddrs->u.iPAddress = pIpAddrs;
+
+ inet_pton(AF_INET, pLogicalChannel->localIP, pIpAddrs->network.data);
- ooSocketConvertIpToNwAddr(pLogicalChannel->localIP,
- pIpAddrs->network.data);
+ pIpAddrs->network.numocts = 4;
+ pIpAddrs->tsapIdentifier = pLogicalChannel->localRtpPort;
+ }
- pIpAddrs->network.numocts = 4;
- pIpAddrs->tsapIdentifier = pLogicalChannel->localRtpPort;
}
pH2250lcp2->m.mediaControlChannelPresent = 1;
pH2250lcp2->mediaControlChannel.t =
@@ -3993,17 +4098,32 @@ int ooBuildFastStartOLC
memset(pUniAddrs, 0, sizeof(H245UnicastAddress));
pH2250lcp2->mediaControlChannel.u.unicastAddress = pUniAddrs;
+ /* May 20101023 */
- pUniAddrs->t = T_H245UnicastAddress_iPAddress;
- pUniIpAddrs = (H245UnicastAddress_iPAddress*) ASN1MALLOC(pctxt, sizeof(H245UnicastAddress_iPAddress));
- memset(pUniIpAddrs, 0, sizeof(H245UnicastAddress_iPAddress));
- pUniAddrs->u.iPAddress = pUniIpAddrs;
-
- ooSocketConvertIpToNwAddr(pLogicalChannel->localIP,
- pUniIpAddrs->network.data);
- pUniIpAddrs->network.numocts = 4;
- pUniIpAddrs->tsapIdentifier = pLogicalChannel->localRtcpPort;
-
+ if (call->versionIP == 6) {
+ pUniAddrs->t = T_H245UnicastAddress_iP6Address;
+ pUniIp6Addrs = (H245UnicastAddress_iP6Address*) ASN1MALLOC(pctxt,
+ sizeof(H245UnicastAddress_iP6Address));
+ memset(pUniIp6Addrs, 0, sizeof(H245UnicastAddress_iP6Address));
+ pUniAddrs->u.iP6Address = pUniIp6Addrs;
+
+ inet_pton(AF_INET6, pLogicalChannel->localIP, pUniIp6Addrs->network.data);
+
+ pUniIp6Addrs->network.numocts = 16;
+ pUniIp6Addrs->tsapIdentifier = pLogicalChannel->localRtcpPort;
+ } else {
+ pUniAddrs->t = T_H245UnicastAddress_iPAddress;
+ pUniIpAddrs = (H245UnicastAddress_iPAddress*) ASN1MALLOC(pctxt,
+ sizeof(H245UnicastAddress_iPAddress));
+ memset(pUniIpAddrs, 0, sizeof(H245UnicastAddress_iPAddress));
+ pUniAddrs->u.iPAddress = pUniIpAddrs;
+
+ inet_pton(AF_INET, pLogicalChannel->localIP, pUniIpAddrs->network.data);
+
+ pUniIpAddrs->network.numocts = 4;
+ pUniIpAddrs->tsapIdentifier = pLogicalChannel->localRtcpPort;
+ }
+
/*
In case of fast start, the local endpoint need to be ready to
receive all the media types proposed in the fast connect, before
@@ -4201,6 +4321,7 @@ int ooGetIpPortFromH245TransportAddress
{
H245UnicastAddress *unicastAddress = NULL;
H245UnicastAddress_iPAddress *ipAddress = NULL;
+ H245UnicastAddress_iP6Address *ip6Address = NULL;
regmatch_t pmatch[1];
if(h245Address->t != T_H245TransportAddress_unicastAddress)
@@ -4211,7 +4332,17 @@ int ooGetIpPortFromH245TransportAddress
}
unicastAddress = h245Address->u.unicastAddress;
- if(unicastAddress->t != T_H245UnicastAddress_iPAddress)
+ if (call->versionIP == 6) {
+ if (unicastAddress->t != T_H245UnicastAddress_iP6Address) {
+ OOTRACEERR3("ERROR:H245 Address type is not IP6"
+ "(%s, %s)\n", call->callType, call->callToken);
+ return OO_FAILED;
+ }
+ ip6Address = unicastAddress->u.iP6Address;
+ *port = ip6Address->tsapIdentifier;
+ inet_ntop(AF_INET6, ip6Address->network.data, ip, INET6_ADDRSTRLEN);
+
+ } else { if(unicastAddress->t != T_H245UnicastAddress_iPAddress)
{
OOTRACEERR3("ERROR:H245 Address type is not IP"
"(%s, %s)\n", call->callType, call->callToken);
@@ -4220,11 +4351,8 @@ int ooGetIpPortFromH245TransportAddress
ipAddress = unicastAddress->u.iPAddress;
*port = ipAddress->tsapIdentifier;
-
- sprintf(ip, "%d.%d.%d.%d", ipAddress->network.data[0],
- ipAddress->network.data[1],
- ipAddress->network.data[2],
- ipAddress->network.data[3]);
+ inet_ntop(AF_INET, ipAddress->network.data, ip, INET_ADDRSTRLEN);
+ }
if (call->rtpMaskStr[0]) {
if (regexec(&call->rtpMask->regex, ip, 1, pmatch, 0)) {
OOTRACEERR5("ERROR:H245 Address is not matched with filter %s/%s"
@@ -4232,7 +4360,6 @@ int ooGetIpPortFromH245TransportAddress
return OO_FAILED;
}
}
-
return OO_OK;
}
@@ -4247,6 +4374,7 @@ int ooPrepareFastStartResponseOLC
H245H2250LogicalChannelParameters *pH2250lcp1=NULL, *pH2250lcp2=NULL;
H245UnicastAddress *pUnicastAddrs=NULL, *pUniAddrs=NULL;
H245UnicastAddress_iPAddress *pIpAddrs=NULL, *pUniIpAddrs=NULL;
+ H245UnicastAddress_iP6Address *pIp6Addrs=NULL, *pUniIp6Addrs=NULL;
unsigned session_id = 0;
ooLogicalChannel *pLogicalChannel = NULL;
@@ -4292,53 +4420,82 @@ int ooPrepareFastStartResponseOLC
pH2250lcp1->m.mediaChannelPresent = 1;
pH2250lcp1->mediaChannel.t = T_H245TransportAddress_unicastAddress;
- pUniAddrs = (H245UnicastAddress*) memAlloc(pctxt,
+ pUniAddrs = (H245UnicastAddress*) memAllocZ(pctxt,
sizeof(H245UnicastAddress));
- pUniIpAddrs = (H245UnicastAddress_iPAddress*) memAlloc(pctxt,
+ pH2250lcp1->mediaChannel.u.unicastAddress = pUniAddrs;
+ if (call->versionIP == 6) {
+ pUniIp6Addrs = (H245UnicastAddress_iP6Address*) memAllocZ(pctxt,
+ sizeof(H245UnicastAddress_iP6Address));
+ if(!pUniAddrs || !pUniIpAddrs) {
+ OOTRACEERR3("Error:Memory - ooPrepareFastStartResponseOLC - pUniAddrs"
+ "/pUniIpAddrs (%s, %s)\n", call->callType,
+ call->callToken);
+ return OO_FAILED;
+ }
+
+ pUniAddrs->t = T_H245UnicastAddress_iP6Address;
+ pUniAddrs->u.iP6Address = pUniIp6Addrs;
+ inet_pton(AF_INET6, pLogicalChannel->localIP, pUniIp6Addrs->network.data);
+
+ pUniIp6Addrs->network.numocts = 16;
+ pUniIp6Addrs->tsapIdentifier = pLogicalChannel->localRtpPort;
+
+ } else {
+ pUniIpAddrs = (H245UnicastAddress_iPAddress*) memAllocZ(pctxt,
sizeof(H245UnicastAddress_iPAddress));
- if(!pUniAddrs || !pUniIpAddrs)
- {
+ if(!pUniAddrs || !pUniIpAddrs) {
OOTRACEERR3("Error:Memory - ooPrepareFastStartResponseOLC - pUniAddrs"
"/pUniIpAddrs (%s, %s)\n", call->callType,
call->callToken);
return OO_FAILED;
- }
+ }
- pH2250lcp1->mediaChannel.u.unicastAddress = pUniAddrs;
- pUniAddrs->t = T_H245UnicastAddress_iPAddress;
- pUniAddrs->u.iPAddress = pUniIpAddrs;
+ pUniAddrs->t = T_H245UnicastAddress_iPAddress;
+ pUniAddrs->u.iPAddress = pUniIpAddrs;
+ inet_pton(AF_INET, pLogicalChannel->localIP, pUniIpAddrs->network.data);
- ooSocketConvertIpToNwAddr(pLogicalChannel->localIP,
- pUniIpAddrs->network.data);
+ pUniIpAddrs->network.numocts = 4;
+ pUniIpAddrs->tsapIdentifier = pLogicalChannel->localRtpPort;
+ }
- pUniIpAddrs->network.numocts = 4;
- pUniIpAddrs->tsapIdentifier = pLogicalChannel->localRtpPort;
pH2250lcp1->m.mediaControlChannelPresent = 1;
pH2250lcp1->mediaControlChannel.t =
T_H245TransportAddress_unicastAddress;
- pUnicastAddrs = (H245UnicastAddress*) memAlloc(pctxt,
+ pUnicastAddrs = (H245UnicastAddress*) memAllocZ(pctxt,
sizeof(H245UnicastAddress));
- pIpAddrs = (H245UnicastAddress_iPAddress*) memAlloc(pctxt,
- sizeof(H245UnicastAddress_iPAddress));
- if(!pUnicastAddrs || !pIpAddrs)
- {
+ pH2250lcp1->mediaControlChannel.u.unicastAddress = pUnicastAddrs;
+
+ if (call->versionIP == 6) {
+ pIp6Addrs = (H245UnicastAddress_iP6Address*) memAllocZ(pctxt,
+ sizeof(H245UnicastAddress_iP6Address));
+ if(!pUnicastAddrs || !pIp6Addrs) {
OOTRACEERR3("Error:Memory - ooPrepareFastStartResponseOLC - "
"pUnicastAddrs/pIpAddrs (%s, %s)\n", call->callType,
call->callToken);
return OO_FAILED;
- }
- memset(pUnicastAddrs, 0, sizeof(H245UnicastAddress));
- pH2250lcp1->mediaControlChannel.u.unicastAddress = pUnicastAddrs;
- pUnicastAddrs->t = T_H245UnicastAddress_iPAddress;
-
- pUnicastAddrs->u.iPAddress = pIpAddrs;
-
- ooSocketConvertIpToNwAddr(pLogicalChannel->localIP,
- pIpAddrs->network.data);
+ }
+ pUnicastAddrs->t = T_H245UnicastAddress_iP6Address;
+ pUnicastAddrs->u.iP6Address = pIp6Addrs;
+ inet_pton(AF_INET6, pLogicalChannel->localIP, pIp6Addrs->network.data);
+ pIp6Addrs->network.numocts = 16;
+ pIp6Addrs->tsapIdentifier = pLogicalChannel->localRtcpPort;
+ } else {
- pIpAddrs->network.numocts = 4;
- pIpAddrs->tsapIdentifier = pLogicalChannel->localRtcpPort;
+ pIpAddrs = (H245UnicastAddress_iPAddress*) memAllocZ(pctxt,
+ sizeof(H245UnicastAddress_iPAddress));
+ if(!pUnicastAddrs || !pIpAddrs) {
+ OOTRACEERR3("Error:Memory - ooPrepareFastStartResponseOLC - "
+ "pUnicastAddrs/pIpAddrs (%s, %s)\n", call->callType,
+ call->callToken);
+ return OO_FAILED;
+ }
+ pUnicastAddrs->t = T_H245UnicastAddress_iPAddress;
+ pUnicastAddrs->u.iPAddress = pIpAddrs;
+ inet_pton(AF_INET, pLogicalChannel->localIP, pIpAddrs->network.data);
+ pIpAddrs->network.numocts = 4;
+ pIpAddrs->tsapIdentifier = pLogicalChannel->localRtcpPort;
+ }
}
if(reverse)
@@ -4357,26 +4514,42 @@ int ooPrepareFastStartResponseOLC
T_H245TransportAddress_unicastAddress;
pUniAddrs = (H245UnicastAddress*) memAlloc(pctxt,
sizeof(H245UnicastAddress));
- pUniIpAddrs = (H245UnicastAddress_iPAddress*) memAlloc(pctxt,
- sizeof(H245UnicastAddress_iPAddress));
- if(!pUniAddrs || !pUniIpAddrs)
- {
- OOTRACEERR3("Error:Memory - ooPrepareFastStartResponseOLC - "
+ pH2250lcp2->mediaControlChannel.u.unicastAddress = pUniAddrs;
+
+ if (call->versionIP == 6) {
+ pUniIp6Addrs = (H245UnicastAddress_iP6Address*) memAlloc(pctxt,
+ sizeof(H245UnicastAddress_iP6Address));
+ if(!pUniAddrs || !pUniIp6Addrs) {
+ OOTRACEERR3("Error:Memory - ooPrepareFastStartResponseOLC - "
"pUniAddrs/pUniIpAddrs (%s, %s)\n", call->callType,
call->callToken);
return OO_FAILED;
- }
+ }
- pH2250lcp2->mediaControlChannel.u.unicastAddress = pUniAddrs;
- pUniAddrs->t = T_H245UnicastAddress_iPAddress;
-
- pUniAddrs->u.iPAddress = pUniIpAddrs;
+ pUniAddrs->t = T_H245UnicastAddress_iP6Address;
+ pUniAddrs->u.iP6Address = pUniIp6Addrs;
+ inet_pton(AF_INET6, pLogicalChannel->localIP, pUniIp6Addrs->network.data);
+ pUniIp6Addrs->network.numocts = 16;
+ pUniIp6Addrs->tsapIdentifier = pLogicalChannel->localRtcpPort;
+ } else {
+ pUniIpAddrs = (H245UnicastAddress_iPAddress*) memAlloc(pctxt,
+ sizeof(H245UnicastAddress_iPAddress));
+ if(!pUniAddrs || !pUniIpAddrs) {
+ OOTRACEERR3("Error:Memory - ooPrepareFastStartResponseOLC - "
+ "pUniAddrs/pUniIpAddrs (%s, %s)\n", call->callType,
+ call->callToken);
+ return OO_FAILED;
+ }
- ooSocketConvertIpToNwAddr(pLogicalChannel->localIP,
- pUniIpAddrs->network.data);
- pUniIpAddrs->network.numocts = 4;
- pUniIpAddrs->tsapIdentifier = pLogicalChannel->localRtcpPort;
+ pH2250lcp2->mediaControlChannel.u.unicastAddress = pUniAddrs;
+
+ pUniAddrs->t = T_H245UnicastAddress_iPAddress;
+ pUniAddrs->u.iPAddress = pUniIpAddrs;
+ inet_pton(AF_INET, pLogicalChannel->localIP, pUniIpAddrs->network.data);
+ pUniIpAddrs->network.numocts = 4;
+ pUniIpAddrs->tsapIdentifier = pLogicalChannel->localRtcpPort;
+ }
}