SDPSession::SDPSession(SDPParser* parser, NamedList& params) : m_parser(parser), m_mediaStatus(MediaMissing), m_rtpForward(false), m_sdpForward(false), m_rtpMedia(0), m_sdpSession(0), m_sdpVersion(0) { m_rtpForward = params.getBoolValue("rtp_forward"); m_secure = params.getBoolValue("secure",parser->m_secure); m_rfc2833 = parser->m_rfc2833; setRfc2833(params.getParam("rfc2833")); }
void SS7Testing::setParams(const NamedList& params, bool setSeq) { if (!m_timer.interval() || params.getParam(YSTRING("interval"))) m_timer.interval(params,"interval",20,1000,true); m_len = params.getIntValue(YSTRING("length"),m_len); m_sharing = params.getBoolValue(YSTRING("sharing"),m_sharing); if (m_len > 1024) m_len = 1024; if (setSeq || !m_seq) m_seq = params.getIntValue(YSTRING("sequence"),m_seq); const String* lbl = params.getParam(YSTRING("address")); if (!TelEngine::null(lbl)) { // TYPE,opc,dpc,sls,spare SS7PointCode::Type t = SS7PointCode::Other; ObjList* l = lbl->split(','); const GenObject* o = l->at(0); if (o) { t = SS7PointCode::lookup(o->toString()); if (t == SS7PointCode::Other) t = m_lbl.type(); } if (t != SS7PointCode::Other) { o = l->at(1); if (o) { SS7PointCode c(m_lbl.opc()); if (c.assign(o->toString(),t)) m_lbl.assign(t,m_lbl.dpc(),c,m_lbl.sls(),m_lbl.spare()); } o = l->at(2); if (o) { SS7PointCode c(m_lbl.dpc()); if (c.assign(o->toString(),t)) m_lbl.assign(t,c,m_lbl.opc(),m_lbl.sls(),m_lbl.spare()); } o = l->at(3); if (o) { int sls = o->toString().toInteger(-1); if (sls >= 0) m_lbl.setSls(sls); } o = l->at(4); if (o) { int spare = o->toString().toInteger(-1); if (spare >= 0) m_lbl.setSpare(spare); } } delete l; } }
// Create a buffer containing the byte representation of a message to be sent // and another one with the header bool ETSIModem::createMsg(NamedList& params, DataBlock& data) { int type = lookup(params,s_msg); switch (type) { case MsgCallSetup: break; case MsgMWI: case MsgCharge: case MsgSMS: Debug(this,DebugStub,"Create message '%s' not implemented [%p]", params.c_str(),this); return false; default: Debug(this,DebugNote,"Can't create unknown message '%s' [%p]", params.c_str(),this); return false; } ObjList msg; bool fail = !params.getBoolValue("force-send",true); // DateTime - ETSI EN 300 659-3 - 5.4.1 String datetime = params.getValue("datetime"); unsigned char dt[4]; bool ok = false; if (datetime.isBoolean()) if (datetime.toBoolean()) ok = getDateTime(dt); else ; else ok = getDateTime(dt,&datetime); if (ok) { DataBlock* dtParam = new DataBlock(0,10); unsigned char* d = (unsigned char*)dtParam->data(); d[0] = DateTime; d[1] = 8; // Set date and time: %.2d%.2d%.2d%.2d month:day:hour:minute for (int i = 0, j = 2; i < 4; i++, j += 2) { d[j] = '0' + dt[i] / 10; d[j+1] = '0' + dt[i] % 10; } msg.append(dtParam); } else DDebug(this,DebugInfo,"Can't set datetime parameter from '%s' [%p]", datetime.c_str(),this); // CallerId/CallerIdReason - ETSI EN 300 659-3 - 5.4.2: Max caller id 20 // Parameter is missing: append reason (default caller absence: 0x4f: unavailable) int res = appendParam(msg,params,CallerId,20,fail); if (res == -1) return false; if (!res) appendParam(msg,params,CallerIdReason,s_dict_callerAbsence,0x4f); // CallerName/CallerNameReason - ETSI EN 300 659-3 - 5.4.5: Max caller name 50 // Parameter is missing: append reason (default callername absence: 0x4f: unavailable) res = appendParam(msg,params,CallerName,50,fail); if (res == -1) return false; if (!res) appendParam(msg,params,CallerNameReason,s_dict_callerAbsence,0x4f); // Build message unsigned char len = 0; unsigned char hdr[2] = {type}; data.assign(&hdr,sizeof(hdr)); for (ObjList* o = msg.skipNull(); o; o = o->skipNext()) { DataBlock* msgParam = static_cast<DataBlock*>(o->get()); if (len + msgParam->length() > 255) { if (!fail) { Debug(this,DebugNote,"Trucating %s message length to %u bytes [%p]", params.c_str(),data.length(),this); break; } params.setParam("error","message-too-long"); return false; } len += msgParam->length(); data += *msgParam; } if (!len) { params.setParam("error","empty-message"); return false; } unsigned char* buf = ((unsigned char*)(data.data())); buf[1] = len; m_chksum = 0; for (unsigned int i = 0; i < data.length(); i++) m_chksum += buf[i]; unsigned char crcVal = 256 - (m_chksum & 0xff); FSKModem::addRaw(data,&crcVal,1); return true; }