home *** CD-ROM | disk | FTP | other *** search
/ ftp.muug.mb.ca / 2014.06.ftp.muug.mb.ca.tar / ftp.muug.mb.ca / pub / openh323.tar.gz / openh323.tar / openh323 / src / h501pdu.cxx < prev    next >
C/C++ Source or Header  |  2003-04-09  |  11KB  |  430 lines

  1. /*
  2.  * h501pdu.cxx
  3.  *
  4.  * H.501 PDU definitions
  5.  *
  6.  * Open H323 Library
  7.  *
  8.  * Copyright (c) 2003 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Open H323 Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Contributor(s): ______________________________________.
  25.  *
  26.  * $Log: h501pdu.cxx,v $
  27.  * Revision 1.11  2003/04/10 01:00:12  craigs
  28.  * Changed to allow reply address to be a list
  29.  *
  30.  * Revision 1.10  2003/03/28 05:34:06  robertj
  31.  * Added implementation for GetRequestInProgressDelay
  32.  *
  33.  * Revision 1.9  2003/03/28 05:08:39  robertj
  34.  * Added delay parameter to BuildRequestInProgress
  35.  *
  36.  * Revision 1.8  2003/03/25 04:56:21  robertj
  37.  * Fixed issues to do with multiple inheritence in transaction reply cache.
  38.  *
  39.  * Revision 1.7  2003/03/20 01:51:12  robertj
  40.  * More abstraction of H.225 RAS and H.501 protocols transaction handling.
  41.  *
  42.  * Revision 1.6  2003/03/18 13:57:53  craigs
  43.  * More H.501 implementation
  44.  *
  45.  * Revision 1.5  2003/03/17 13:19:31  craigs
  46.  * More H501 implementation
  47.  *
  48.  * Revision 1.4  2003/03/14 06:01:16  craigs
  49.  * More updates
  50.  *
  51.  * Revision 1.3  2003/03/01 00:22:10  craigs
  52.  * New PeerElement implementation
  53.  *
  54.  * Revision 1.2  2003/02/25 06:48:19  robertj
  55.  * More work on PDU transaction abstraction.
  56.  *
  57.  * Revision 1.1  2003/02/21 05:27:06  craigs
  58.  * Initial version
  59.  *
  60.  */
  61.  
  62.  
  63. #include <ptlib.h>
  64.  
  65. #ifdef __GNUC__
  66. #pragma implementation "h501pdu.h"
  67. #endif
  68.  
  69. #include "h501.h"
  70. #include "h501pdu.h"
  71. #include "h323pdu.h"
  72.  
  73.  
  74.  
  75. H501PDU::H501PDU()
  76. {
  77. }
  78.  
  79.  
  80. PObject * H501PDU::Clone() const
  81. {
  82.   return new H501PDU(*this);
  83. }
  84.  
  85.  
  86. const PASN_Object & H501PDU::GetPDU() const
  87. {
  88.   return *this;
  89. }
  90.  
  91.  
  92. const PASN_Choice & H501PDU::GetChoice() const
  93. {
  94.   return m_body;
  95. }
  96.  
  97.  
  98. PASN_Object & H501PDU::GetPDU()
  99. {
  100.   return *this;
  101. }
  102.  
  103.  
  104. PASN_Choice & H501PDU::GetChoice()
  105. {
  106.   return m_body;
  107. }
  108.  
  109.  
  110. unsigned H501PDU::GetSequenceNumber() const
  111. {
  112.   return m_common.m_sequenceNumber;
  113. }
  114.  
  115.  
  116. unsigned H501PDU::GetRequestInProgressDelay() const
  117. {
  118.   if (m_body.GetTag() != H501_MessageBody::e_requestInProgress)
  119.     return 0;
  120.  
  121.   const H501_RequestInProgress & pdu_body = m_body;
  122.   return pdu_body.m_delay;
  123. }
  124.  
  125.  
  126. #if PTRACING
  127. const char * H501PDU::GetProtocolName() const
  128. {
  129.   return "H501";
  130. }
  131. #endif
  132.  
  133.  
  134. H323TransactionPDU * H501PDU::ClonePDU() const
  135. {
  136.   return new H501PDU(*this);
  137. }
  138.  
  139.  
  140. void H501PDU::DeletePDU()
  141. {
  142.   delete this;
  143. }
  144.  
  145.  
  146. void H501PDU::BuildPDU(unsigned tag, unsigned seqnum)
  147. {
  148.   m_body.SetTag(tag);
  149.   m_common.m_sequenceNumber = seqnum;
  150.   m_common.m_hopCount       = 10;
  151.   m_common.m_annexGversion.SetValue("0.0.8.2250.1.7.0.2"); //  {itu-t(0) recommendation(0) h(8) h-225-0(2250) annex(1) g(7) version(0) 2}
  152.   m_common.m_version.SetValue("0.0.8.501.0.1");            // {itu-t(0) recommendation(0) h(8) 501 version(0) 1} 
  153. }
  154.  
  155.  
  156. void H501PDU::BuildRequest(unsigned tag, unsigned seqnum, const H323TransportAddressArray & replyAddr)
  157. {
  158.   BuildPDU(tag, seqnum);
  159.   m_common.IncludeOptionalField(H501_MessageCommonInfo::e_replyAddress);
  160.   PINDEX i;
  161.   m_common.m_replyAddress.SetSize(replyAddr.GetSize());
  162.   for (i = 0; i < replyAddr.GetSize(); i++)
  163.     replyAddr[i].SetPDU(m_common.m_replyAddress[i]);
  164. }
  165.  
  166.  
  167. H501_ServiceRequest & H501PDU::BuildServiceRequest(unsigned seqnum, const H323TransportAddressArray & reply)
  168. {
  169.   BuildRequest(H501_MessageBody::e_serviceRequest, seqnum, reply);
  170.   H501_ServiceRequest & pdu_body = m_body;
  171.   return pdu_body;
  172. }
  173.  
  174.  
  175. H501_ServiceConfirmation & H501PDU::BuildServiceConfirmation(unsigned seqnum)
  176. {
  177.   BuildPDU(H501_MessageBody::e_serviceConfirmation, seqnum);
  178.   H501_ServiceConfirmation & pdu_body = m_body;
  179.   return pdu_body;
  180. }
  181.  
  182.  
  183. H501_ServiceRejection & H501PDU::BuildServiceRejection(unsigned seqnum, unsigned reason)
  184. {
  185.   BuildPDU(H501_MessageBody::e_serviceRejection, seqnum);
  186.   H501_ServiceRejection & pdu_body = m_body;
  187.   pdu_body.m_reason.SetTag(reason);
  188.   return pdu_body;
  189. }
  190.  
  191.  
  192. H501_ServiceRelease & H501PDU::BuildServiceRelease(unsigned seqnum)
  193. {
  194.   BuildPDU(H501_MessageBody::e_serviceRelease, seqnum);
  195.   H501_ServiceRelease & pdu_body = m_body;
  196.   return pdu_body;
  197. }
  198.  
  199.  
  200. H501_DescriptorRequest & H501PDU::BuildDescriptorRequest(unsigned seqnum, const H323TransportAddressArray & reply)
  201. {
  202.   BuildRequest(H501_MessageBody::e_descriptorRequest, seqnum, reply);
  203.   H501_DescriptorRequest & pdu_body = m_body;
  204.   return pdu_body;
  205. }
  206.  
  207.  
  208. H501_DescriptorConfirmation & H501PDU::BuildDescriptorConfirmation(unsigned seqnum)
  209. {
  210.   BuildPDU(H501_MessageBody::e_descriptorConfirmation, seqnum);
  211.   H501_DescriptorConfirmation & pdu_body = m_body;
  212.   return pdu_body;
  213. }
  214.  
  215.  
  216. H501_DescriptorRejection & H501PDU::BuildDescriptorRejection(unsigned seqnum, unsigned reason)
  217. {
  218.   BuildPDU(H501_MessageBody::e_descriptorRejection, seqnum);
  219.   H501_DescriptorRejection & pdu_body = m_body;
  220.   pdu_body.m_reason.SetTag(reason);
  221.   return pdu_body;
  222. }
  223.  
  224.  
  225. H501_DescriptorIDRequest & H501PDU::BuildDescriptorIDRequest(unsigned seqnum, const H323TransportAddressArray & reply)
  226. {
  227.   BuildRequest(H501_MessageBody::e_descriptorIDRequest, seqnum, reply);
  228.   H501_DescriptorIDRequest & pdu_body = m_body;
  229.   return pdu_body;
  230. }
  231.  
  232.  
  233. H501_DescriptorIDConfirmation & H501PDU::BuildDescriptorIDConfirmation(unsigned seqnum)
  234. {
  235.   BuildPDU(H501_MessageBody::e_descriptorIDConfirmation, seqnum);
  236.   H501_DescriptorIDConfirmation & pdu_body = m_body;
  237.   return pdu_body;
  238. }
  239.  
  240.  
  241. H501_DescriptorIDRejection & H501PDU::BuildDescriptorIDRejection(unsigned seqnum, unsigned reason)
  242. {
  243.   BuildPDU(H501_MessageBody::e_descriptorIDRejection, seqnum);
  244.   H501_DescriptorIDRejection & pdu_body = m_body;
  245.   pdu_body.m_reason.SetTag(reason);
  246.   return pdu_body;
  247. }
  248.  
  249.  
  250. H501_DescriptorUpdate & H501PDU::BuildDescriptorUpdate(unsigned seqnum, const H323TransportAddressArray & reply)
  251. {
  252.   BuildRequest(H501_MessageBody::e_descriptorUpdate, seqnum, reply);
  253.   m_common.m_sequenceNumber = seqnum;
  254.   H501_DescriptorUpdate & pdu_body = m_body;
  255.   return pdu_body;
  256. }
  257.  
  258.  
  259. H501_DescriptorUpdateAck & H501PDU::BuildDescriptorUpdateAck(unsigned seqnum)
  260. {
  261.   BuildPDU(H501_MessageBody::e_descriptorUpdateAck, seqnum);
  262.   H501_DescriptorUpdateAck & pdu_body = m_body;
  263.   return pdu_body;
  264. }
  265.  
  266.  
  267. H501_AccessRequest & H501PDU::BuildAccessRequest(unsigned seqnum, const H323TransportAddressArray & reply)
  268. {
  269.   BuildRequest(H501_MessageBody::e_accessRequest, seqnum, reply);
  270.   H501_AccessRequest & pdu_body = m_body;
  271.   return pdu_body;
  272. }
  273.  
  274.  
  275. H501_AccessConfirmation & H501PDU::BuildAccessConfirmation(unsigned seqnum)
  276. {
  277.   BuildPDU(H501_MessageBody::e_accessConfirmation, seqnum);
  278.   H501_AccessConfirmation & pdu_body = m_body;
  279.   return pdu_body;
  280. }
  281.  
  282.  
  283. H501_AccessRejection & H501PDU::BuildAccessRejection(unsigned seqnum, int reason)
  284. {
  285.   BuildPDU(H501_MessageBody::e_accessRejection, seqnum);
  286.   H501_AccessRejection & pdu_body = m_body;
  287.   pdu_body.m_reason.SetTag(reason);
  288.   return pdu_body;
  289. }
  290.  
  291.  
  292. H501_RequestInProgress & H501PDU::BuildRequestInProgress(unsigned seqnum, unsigned delay)
  293. {
  294.   BuildPDU(H501_MessageBody::e_requestInProgress, seqnum);
  295.   H501_RequestInProgress & pdu_body = m_body;
  296.   pdu_body.m_delay = delay;
  297.   return pdu_body;
  298. }
  299.  
  300.  
  301. H501_NonStandardRequest & H501PDU::BuildNonStandardRequest(unsigned seqnum, const H323TransportAddressArray & reply)
  302. {
  303.   BuildRequest(H501_MessageBody::e_nonStandardRequest, seqnum, reply);
  304.   m_common.m_sequenceNumber = seqnum;
  305.   H501_NonStandardRequest & pdu_body = m_body;
  306.   return pdu_body;
  307. }
  308.  
  309.  
  310. H501_NonStandardConfirmation & H501PDU::BuildNonStandardConfirmation(unsigned seqnum)
  311. {
  312.   BuildPDU(H501_MessageBody::e_nonStandardConfirmation, seqnum);
  313.   H501_NonStandardConfirmation & pdu_body = m_body;
  314.   return pdu_body;
  315. }
  316.  
  317.  
  318. H501_NonStandardRejection & H501PDU::BuildNonStandardRejection(unsigned seqnum, unsigned reason)
  319. {
  320.   BuildPDU(H501_MessageBody::e_nonStandardRejection, seqnum);
  321.   H501_NonStandardRejection & pdu_body = m_body;
  322.   pdu_body.m_reason.SetTag(reason);
  323.   return pdu_body;
  324. }
  325.  
  326.  
  327. H501_UnknownMessageResponse & H501PDU::BuildUnknownMessageResponse(unsigned seqnum)
  328. {
  329.   BuildPDU(H501_MessageBody::e_unknownMessageResponse, seqnum);
  330.   H501_UnknownMessageResponse & pdu_body = m_body;
  331.   return pdu_body;
  332. }
  333.  
  334.  
  335. H501_UsageRequest & H501PDU::BuildUsageRequest(unsigned seqnum, const H323TransportAddressArray & reply)
  336. {
  337.   BuildRequest(H501_MessageBody::e_usageRequest, seqnum, reply);
  338.   m_common.m_sequenceNumber = seqnum;
  339.   H501_UsageRequest & pdu_body = m_body;
  340.   return pdu_body;
  341. }
  342.  
  343.  
  344. H501_UsageConfirmation & H501PDU::BuildUsageConfirmation(unsigned seqnum)
  345. {
  346.   BuildPDU(H501_MessageBody::e_usageConfirmation, seqnum);
  347.   H501_UsageConfirmation & pdu_body = m_body;
  348.   return pdu_body;
  349. }
  350.  
  351.  
  352. H501_UsageIndicationConfirmation & H501PDU::BuildUsageIndicationConfirmation(unsigned seqnum)
  353. {
  354.   BuildPDU(H501_MessageBody::e_usageIndicationConfirmation, seqnum);
  355.   H501_UsageIndicationConfirmation & pdu_body = m_body;
  356.   return pdu_body;
  357. }
  358.  
  359.  
  360. H501_UsageIndicationRejection & H501PDU::BuildUsageIndicationRejection(unsigned seqnum, unsigned reason)
  361. {
  362.   BuildPDU(H501_MessageBody::e_usageIndicationRejection, seqnum);
  363.   H501_UsageIndicationRejection & pdu_body = m_body;
  364.   pdu_body.m_reason.SetTag(reason);
  365.   return pdu_body;
  366. }
  367.  
  368.  
  369. H501_UsageRejection & H501PDU::BuildUsageRejection(unsigned seqnum)
  370. {
  371.   BuildPDU(H501_MessageBody::e_usageRejection, seqnum);
  372.   H501_UsageRejection & pdu_body = m_body;
  373.   return pdu_body;
  374. }
  375.  
  376.  
  377. H501_ValidationRequest & H501PDU::BuildValidationRequest(unsigned seqnum, const H323TransportAddressArray & reply)
  378. {
  379.   BuildRequest(H501_MessageBody::e_validationRequest, seqnum, reply);
  380.   m_common.m_sequenceNumber = seqnum;
  381.   H501_ValidationRequest & pdu_body = m_body;
  382.   return pdu_body;
  383. }
  384.  
  385.  
  386. H501_ValidationConfirmation & H501PDU::BuildValidationConfirmation(unsigned seqnum)
  387. {
  388.   BuildPDU(H501_MessageBody::e_validationConfirmation, seqnum);
  389.   H501_ValidationConfirmation & pdu_body = m_body;
  390.   return pdu_body;
  391. }
  392.  
  393.  
  394. H501_ValidationRejection & H501PDU::BuildValidationRejection(unsigned seqnum, unsigned reason)
  395. {
  396.   BuildPDU(H501_MessageBody::e_validationRejection, seqnum);
  397.   H501_ValidationRejection & pdu_body = m_body;
  398.   pdu_body.m_reason.SetTag(reason);
  399.   return pdu_body;
  400. }
  401.  
  402.  
  403. H501_AuthenticationRequest & H501PDU::BuildAuthenticationRequest(unsigned seqnum, const H323TransportAddressArray & reply)
  404. {
  405.   BuildRequest(H501_MessageBody::e_authenticationRequest, seqnum, reply);
  406.   m_common.m_sequenceNumber = seqnum;
  407.   H501_AuthenticationRequest & pdu_body = m_body;
  408.   return pdu_body;
  409. }
  410.  
  411.  
  412. H501_AuthenticationConfirmation & H501PDU::BuildAuthenticationConfirmation(unsigned seqnum)
  413. {
  414.   BuildPDU(H501_MessageBody::e_authenticationConfirmation, seqnum);
  415.   H501_AuthenticationConfirmation & pdu_body = m_body;
  416.   return pdu_body;
  417. }
  418.  
  419.  
  420. H501_AuthenticationRejection & H501PDU::BuildAuthenticationRejection(unsigned seqnum, unsigned reason)
  421. {
  422.   BuildPDU(H501_MessageBody::e_authenticationRejection, seqnum);
  423.   H501_AuthenticationRejection & pdu_body = m_body;
  424.   pdu_body.m_reason.SetTag(reason);
  425.   return pdu_body;
  426. }
  427.  
  428.  
  429. /////////////////////////////////////////////////////////////////////////////
  430.