⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 casim.c

📁 台湾大学的一个mgcp 协议的实现源码,对研究mgcp协议很有帮助!
💻 C
字号:
/*  * Copyright (C) 1999-2000 Computer & Communications Research Laboratories, *				           Industrial Technology Research Institute *//* * CASim.c */
/*////////String Handle/////////////////////////////////////////////
#include <windows.h>
#include <iostream.h>
#include "Shlwapi.h"
*////////////////////////////////////////////////////////////////////////////#include "mgcp.h"#include "trace.h"#include "tools.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#ifdef WIN32#include <winsock.h>#include <time.h>#endif#ifdef SOLARIS#include <unistd.h>#endif#include <ctype.h>#include "CASim.h"static void enterMSGQ(struct MSGQ* mqe, mgcMsg msg){    struct MSGDATA* mqd = (struct MSGDATA*)malloc(sizeof(struct MSGDATA));	if ( mqe==NULL ) {		free(mqd);		return;	}	mqd->m = strdup(mgcStrAsCStr(mgcMsgAsStr(msg)));	mqd->tid = ATOI(mgcMsgGetTId(msg));	mqd->ack = NULL;    mqd->next = NULL;    if( mqe->headQ==NULL ) 		mqe->headQ = mqd;    else 		mqe->tailQ->next = mqd;    mqe->tailQ = mqd;    mqe->sizeQ++;}static struct MSGDATA* leaveMSGQ(struct MSGQ* mqe) {    struct MSGDATA* mqd = NULL;    if( mqe->headQ==NULL ) {		fprintf(stderr, "\n[MSGQ] attempt to leave empty queue\n");		/* ??? nothing appropriate to return */		return NULL;    }    mqd = mqe->headQ;    mqe->headQ = mqd->next;    mqe->sizeQ--;	return mqd;}mgcMsg setAckMSGQ(struct MSGQ* mqe, mgcAck ack){	struct MSGDATA* mqd = NULL;	struct MSGDATA* pre = NULL;	int tid = ATOI(mgcAckGetTId(ack));	pre = mqd = mqe->headQ;	while ( mqd!=NULL ) {		if ( mqd->tid==tid ) {			mgcMsg msg = mgcMsgNew(getMsgType(mqd->m));			mgcMsgParse(msg, mqd->m);			pre->next = mqd->next;						mqe->sizeQ--;			if ( mqe->headQ==pre )				mqe->headQ = mqd->next;			freeMSGDATA(mqd);			return msg;  /* TID is found in this message queue, return message */		}		pre = mqd;		mqd = mqd->next;	}		return 0;}void freeMSGDATA(struct MSGDATA* mqd){	if (mqd) {		free(mqd->m);		if (mqd->ack) free(mqd->ack);		free(mqd);	}}mgcMsgType getMsgType(char* _this){	if ( strncmp(_this,"EPCF",4) )		return mgcEPtConfig;	else if ( strncmp(_this,"CRCX",4) )		return mgcCreatConn;			else if ( strncmp(_this,"MDCX",4) )		return mgcModConn;			else if ( strncmp(_this,"DLCX",4) )		return mgcDelConn;			else if ( strncmp(_this,"RQNT",4) )		return mgcNotifReq;			else if ( strncmp(_this,"NTFY",4) )		return mgcNotify;			else if ( strncmp(_this,"AUEP",4) )		return mgcAuditEPt;			else if ( strncmp(_this,"AUCX",4) )		return mgcAuditConn;	else if ( strncmp(_this,"RSIP",4) )		return mgcRstrInPrgs;	else 		return mgcUnknown;}void myDupCB(mgcMsg m, mgcAck s) {    fprintf(stderr, "Dup ack %d set for %s\n", 	    mgcAckGetType(s), mgcMsgGetTId(m));}int main(int argc, char**argv){

	char logfname[20];	char *epfname;	struct mgcExtEvents listenTo[2];///////////////////for UI////////////////////
	int recv_flag;
	char recv_stepbystep[3];
/////////////////////////////////////////////	sprintf(logfname, "calog_%s.txt", gettime());	TRACE_BEGIN(logfname)#ifdef WIN32	initSockLib();#endif	if (argc != 2) {		usage("usage error: specify initfile.\n");		exit(1);	}			loadInitVars(argv[1]);	/*use tidLog to log tid*/	tidLog[0] = mgcHashNew(10, 1, MGCHASH_POINTER);	calls = mgcHashNew(10, 0 , MGCHASH_POINTER);
    traceLevel = ATOI(getInitVar("trace"));	logFlag = ATOI(getInitVar("log"));    callAgentPort = ATOI(getInitVar("caPort"));    if( callAgentPort <= 0 ) {		usage("error in caPort");    }    gethostname(myHostName,99);
	//////////////////////////////////////////////////for UI //////////////
	UIIP = getInitVar("UIIP");
	UIport = atoi(getInitVar("UIport"));
	printf("\nUIIP=%s\n",UIIP);
	printf("\nUIport=%d\n",UIport);
	OpenClientSocket(UIIP,UIport);	
	////////////////////////////////////////////////////////////
	/////钡

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -