/*************************************************************************** sua_snm_mgnt.cpp - description ------------------- begin : Tue Nov 4 2002 copyright : (C) 2002 by Lode Coene email : lode.coene@siemens.atea.be ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ /* * $Id: sua_snm_mgnt.cpp,v 1.1 2002/11/12 11:04:12 p82609 Exp $ * * SUA implementation according to SUA draft issue 14. * * Author(s): Lode Coene * * * Copyright (C) 2001 by Siemens Atea, Herentals, Belgium. * * Realized in co-operation between Siemens Atea and * Siemens AG, Munich, Germany. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * Contact: gery.verwimp@siemens.atea.be * lode.coene@siemens.atea.be * * The alternative comment * inspiration : Sabine * "Due to small parts(Booleans), this code is not suitable for" * "childeren under 3 years." * * Purpose: This code-file defines the SUA management handling functions for * sending and receiving SignallingNetwork Management(SNM) messages: * - send a Destination avialeble (DAVA) msg to remote node * - Receive/process Destination State audit(DAUD) msg */ #include "sua_debug.h" #include "sua_asp_mgnt.h" #include "sua_database.h" #include "sua_syntax.h" #include "sua_logging.h" #include "sua_tcb.h" #include #include #include using namespace std; extern db_Sua_DatabaseList sua; extern tcb_Sua_msgqueue_pool msg_store; /***********************************************************************/ /* Sending SUA Signalling Network Management msg(SNM) */ /***********************************************************************/ /***********************************************************************/ /* sua_send_DAVA */ /***********************************************************************/ int sua_send_DAVA( unsigned int Sua_assoc_id ) { Sua_container msg; Sua_syntax_error_struct error; int error_value = 0; int string_size, datalen; signed int sctp_assoc_id; short stream_id = 0; int delivery_type, result; // init the message msg.sua_init(); // fill in the main sua header msg.sua_prim.hdr_msg_class = sua_ssnm; msg.sua_prim.hdr_msg_type.ssnm = ssnm_dava; msg.sua_prim.aff_pc_pres = TRUE; msg.sua_prim.aff_pc = 1; msg.sua_prim.info_pres = FALSE; // encode the SUA DAVA message error = msg.sua_encode(); string_size = msg.sua_msg.size(); delivery_type = SCTP_UNORDERED_DELIVERY; sctp_assoc_id = sua.AssocDB.instance[Sua_assoc_id].SCTP_assoc_id; /* does association exist? */ if (sctp_assoc_id > 0) { // send data to SCTP char* databuf = new char[msg.sua_msg.length()]; msg.sua_msg.copy(databuf, msg.sua_msg.length()); datalen = msg.sua_msg.length(); /* yes it does, continue, no problem, send the msg */ #ifdef DEBUG // display byte array display_byte_array(databuf , msg.sua_msg.length()); #endif char logstring[100]; sprintf(logstring, "SUA encoded message, ready for being send to SCTP assoc %d", sctp_assoc_id); event_log("sua_snm_mgnt.c",logstring); log_byte_array("sua_snm_mgnt.c", databuf,msg.sua_msg.length()); result = sctp_send ( sctp_assoc_id, stream_id, (unsigned char *) databuf, datalen, SUA_PPI, SCTP_USE_PRIMARY, SCTP_NO_CONTEXT, SCTP_INFINITE_LIFETIME, delivery_type, SCTP_BUNDLING_DISABLED ); error_value = result; delete databuf; #ifdef DEBUG cout << "sua_asp_mgnt.c:result DAVA sctp send = "<< result << "\n"; #endif } return(error_value); } /***********************************************************************/ /* Receiving SUA Signalling Network Management msg */ /***********************************************************************/ /***********************************************************************/ /* sua_process_ASPUP_msg */ /***********************************************************************/ int process_DAUD_msg ( unsigned int sua_assoc_id, int local_sua_id, int remote_sua_id, Sua_container sua_asp_msg ) { int error_value; #ifdef DEBUG cout << "sua_snm_mgnt.c:DAUD received, send back a DAVA, DUNA or DRST.\n"; #endif /*sua.AssocDB.up(sua_assoc_id,0);*/ error_value = sua_send_DAVA( sua_assoc_id ); #ifdef DEBUG cout << "sua_asp_mgnt.c:result send DUNA/DAVA/DRST = "<< error_value << "\n"; #endif return(error_value); } //end of module sua_asp_mgnt.c++