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

📄 rvsdpprs.c

📁 h.248协议源码
💻 C
📖 第 1 页 / 共 5 页
字号:
/************************************************************************
Filename    : rvsdpprs.syn/rvsdpprs.c
Description : Sdp syntax and parser. C file is generated by AnaGram tool
************************************************************************
                Copyright (c) 1999 RADVision Inc.
************************************************************************
NOTICE:
This document contains information that is proprietary to RADVision LTD.
No part of this publication may be reproduced in any form whatsoever 
without written prior approval by RADVision LTD..

RADVision LTD. reserves the right to revise this publication and make 
changes without obligation to notify any person of such revisions or 
changes.
************************************************************************
************************************************************************
$Revision: 1.0$
$Date:5/3/00$
$Author:Dan E.$
************************************************************************/

#include "rvsdpmsg.h"
#include "rvsdpsymb.h"
#include "rvsdpprsaux.h"


#define PRS_STATE		  (&(PCB.sdp_prs_state))	
#define SDP_MSG			  (PCB.sdp_msg)
#define BEGIN_TOKEN()     (PRS_STATE->cur_token=(char *)PCB.pointer)
#define TOKEN_START		  PRS_STATE->cur_token 
#define TOKEN_LENGTH	  ((char *)PCB.pointer-TOKEN_START)
#define PRS_ALLOC		  PCB.sdp_msg->alloc
#define CUR_STRING()	  CurString_(TOKEN_START,TOKEN_LENGTH)
#define CUR_INT()		  AsciiToInt(&(PCB),TOKEN_START,TOKEN_LENGTH) 
#define CUR_INT16()		  AsciiToInt16(&(PCB),TOKEN_START,TOKEN_LENGTH) 

#define SYNTAX_ERROR		rvSdpParseSetSyntaxErr(&(PCB))
#define	VALIDATE_LENGTH(l)	rvSdpParserAuxValidateFieldLength(&(PCB),TOKEN_LENGTH,l)

static char empty_str[] = {""};

static RvpStrPtrN CurString_(char * s,int len) {
	RvpStrPtrN x;
	x.buf = s;
	x.len = len;
	return x;
}


static unsigned int AsciiToInt(void * pcb_,char * s,int len) {
	unsigned int acc= *(s+len-1)-'0';
	unsigned int digit10,digit,old_acc = acc;
	unsigned int power=1;
	int i;
	
	for(i=len-2;i>=0;i--) {
		digit10 = (*(s+i)-'0')*power;
		digit = digit10*10;
		if(digit/10 != digit10)/* Check for int rollover - field too big */
			rvSdpParseSetSemErr(pcb_,"Field too long");
		acc+=digit;
		power*=10;

		if(old_acc>acc) /* Check for int rollover - field too big */
			rvSdpParseSetSemErr(pcb_,"Field too long");
		old_acc = acc;
	}
	return acc;	
}


static unsigned int AsciiToInt16(void * pcb_,char * s,int len) {
	unsigned int max = 0xFFFF;
	unsigned int value = AsciiToInt(pcb_,s,len);

	if(value>max)
		rvSdpParseSetSemErr(pcb_,"Field larger than 0xFFFF");

	return value;	
}


/*

AnaGram, A System for Syntax Directed Programming
Copyright (c) 1993-2000, Parsifal Software.
All Rights Reserved.

Version 2.01.07   Dec 18 2000

Serial number 2P19717V
Registered to:
  Dan Elbert
  RADVision, Inc.

*/

#ifndef RVSDPPRS_H_1007654976
#include "rvsdpprs.h"
#endif

#ifndef RVSDPPRS_H_1007654976
#error Mismatched header file
#endif

#include <ctype.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define RULE_CONTEXT (&((PCB).cs[(PCB).ssx]))
#define ERROR_CONTEXT ((PCB).cs[(PCB).error_frame_ssx])
#define CONTEXT ((PCB).cs[(PCB).ssx])


#ifndef PCB_TYPE
#define PCB_TYPE rvSdpParser_pcb_type
#endif


#define PCB (*pcb_pointer)
#define PCB_DECL PCB_TYPE *pcb_pointer
#define PCB_POINTER pcb_pointer

#ifndef CONVERT_CASE

static const char agCaseTable[31] = {
  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,    0,
  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20
};

static int agConvertCase(int c) {
  if (c >= 'a' && c <= 'z') return c ^= 0x20;
  if (c >= 0xe0 && c < 0xff) c ^= agCaseTable[c-0xe0];
  return c;
}

#define CONVERT_CASE(c) agConvertCase(c)

#endif


#ifndef TAB_SPACING
#define TAB_SPACING 8
#endif

#define ag_rp_1(PCB_POINTER) (CUR_STRING())

static void ag_rp_5(PCB_DECL) {
/* Line 218, Z:/rv/sdp/rvsdpprs.syn */
 PRS_STATE->cur_line = PRS_STATE->cur_token  = (char*)PCB.pointer; 
}

static void ag_rp_6(PCB_DECL) {
/* Line 219, Z:/rv/sdp/rvsdpprs.syn */
 PRS_STATE->cur_line = PRS_STATE->cur_token  = (char*)PCB.pointer; 
}

#define ag_rp_7(PCB_POINTER) (BEGIN_TOKEN())

#define ag_rp_8(PCB_POINTER) (BEGIN_TOKEN())

#define ag_rp_9(PCB_POINTER) (BEGIN_TOKEN())

#define ag_rp_10(PCB_POINTER) (BEGIN_TOKEN())

#define ag_rp_11(PCB_POINTER) (BEGIN_TOKEN())

#define ag_rp_12(PCB_POINTER) (BEGIN_TOKEN())

#define ag_rp_13(PCB_POINTER) (BEGIN_TOKEN())

#define ag_rp_14(PCB_POINTER) (BEGIN_TOKEN())

#define ag_rp_15(PCB_POINTER) (BEGIN_TOKEN())

#define ag_rp_16(PCB_POINTER) (PRS_STATE->stat = RV_SDPPARSER_STOP_ZERO)

#define ag_rp_17(PCB_POINTER) (PRS_STATE->stat = RV_SDPPARSER_STOP_DOTLINE)

#define ag_rp_18(PCB_POINTER) (PRS_STATE->stat = RV_SDPPARSER_STOP_BLANKLINE)

#define ag_rp_19(PCB_POINTER) (PRS_STATE->stat = RV_SDPPARSER_STOP_CLOSEBRACE)

static void ag_rp_20(PCB_DECL) {
/* Line 292, Z:/rv/sdp/rvsdpprs.syn */
 
			VALIDATE_LENGTH(RV_SDPMAX_VERSION_SIZE);
			rvSdpMsgSetVersionN(SDP_MSG,TOKEN_START,TOKEN_LENGTH); 
		
}

static void ag_rp_21(PCB_DECL, RvpStrPtrN u, RvpStrPtrN i, RvpStrPtrN v) {
/* Line 299, Z:/rv/sdp/rvsdpprs.syn */
			rvSdpParserAuxSetOriginN(PRS_STATE,SDP_MSG,u.buf,u.len,i.buf,i.len,v.buf,v.len);
		
}

#define ag_rp_22(PCB_POINTER, s) (rvSdpMsgSetSessionNameN(SDP_MSG,s.buf,s.len))

#define ag_rp_23(PCB_POINTER, s) (rvSdpCommonFieldsSetInformationN(PRS_STATE->cur_sdp_fields,s.buf,s.len))

#define ag_rp_24(PCB_POINTER, u) (rvSdpMsgSetURIN(SDP_MSG,u.buf,u.len))

static void ag_rp_25(PCB_DECL) {
/* Line 324, Z:/rv/sdp/rvsdpprs.syn */
		rvSdpParserAuxSetConnectionN(PRS_STATE);
	
}

static void ag_rp_26(PCB_DECL, RvpStrPtrN a, RvpStrPtrN ca) {
/* Line 330, Z:/rv/sdp/rvsdpprs.syn */
 
		rvSdpParserAuxSaveAddr(PRS_STATE, "-", 1, a.buf, a.len, ca.buf, ca.len);
	
}

static void ag_rp_27(PCB_DECL, RvpStrPtrN a, RvpStrPtrN ca) {
/* Line 333, Z:/rv/sdp/rvsdpprs.syn */
 
		rvSdpParserAuxSaveAddr(PRS_STATE, "$", 1, a.buf, a.len, ca.buf, ca.len);
	
}

static void ag_rp_28(PCB_DECL, RvpStrPtrN a, RvpStrPtrN ca) {
/* Line 336, Z:/rv/sdp/rvsdpprs.syn */
 
		rvSdpParserAuxSaveAddr(PRS_STATE, "IN", 2, a.buf, a.len, ca.buf, ca.len);
	
}

static void ag_rp_29(PCB_DECL, RvpStrPtrN a, RvpStrPtrN ca) {
/* Line 339, Z:/rv/sdp/rvsdpprs.syn */
 
		rvSdpParserAuxSaveAddr(PRS_STATE, "TN", 2, a.buf, a.len, ca.buf, ca.len);
	
}

static void ag_rp_30(PCB_DECL, RvpStrPtrN a, RvpStrPtrN ca) {
/* Line 342, Z:/rv/sdp/rvsdpprs.syn */
 
		rvSdpParserAuxSaveAddr(PRS_STATE, "ATM", 3, a.buf, a.len, ca.buf, ca.len);
	
}

static void ag_rp_31(PCB_DECL, RvpStrPtrN ca) {
/* Line 346, Z:/rv/sdp/rvsdpprs.syn */
 
		rvSdpParserAuxSaveAddr(PRS_STATE, "ATM", 3, "NSAP", 4, ca.buf, ca.len);
	
}

static void ag_rp_32(PCB_DECL, RvpStrPtrN ca) {
/* Line 349, Z:/rv/sdp/rvsdpprs.syn */
 
		rvSdpParserAuxSaveAddr(PRS_STATE, "ATM", 3, "E164", 4, ca.buf, ca.len);
	
}

static void ag_rp_33(PCB_DECL, RvpStrPtrN ca) {
/* Line 352, Z:/rv/sdp/rvsdpprs.syn */
 
		rvSdpParserAuxSaveAddr(PRS_STATE, "ATM", 3, "GWID", 4, ca.buf, ca.len);
	
}

static void ag_rp_34(PCB_DECL, RvpStrPtrN ca) {
/* Line 355, Z:/rv/sdp/rvsdpprs.syn */
 
		rvSdpParserAuxSaveAddr(PRS_STATE, "ATM", 3, "ALIAS", 5, ca.buf, ca.len);
	
}

static void ag_rp_35(PCB_DECL, RvpStrPtrN a) {
/* Line 359, Z:/rv/sdp/rvsdpprs.syn */
 
		rvSdpParserAuxSaveAddr(PRS_STATE, "IN", 2, "IP4", 3, a.buf, a.len);
	
}

static void ag_rp_36(PCB_DECL, RvpStrPtrN a) {
/* Line 362, Z:/rv/sdp/rvsdpprs.syn */
 
		rvSdpParserAuxSaveAddr(PRS_STATE, "IN", 2, "IP6", 3, a.buf, a.len);
	
}

static void ag_rp_37(PCB_DECL, RvpStrPtrN a) {
/* Line 366, Z:/rv/sdp/rvsdpprs.syn */
 
		rvSdpParserAuxSaveAddr(PRS_STATE, "TN", 2, "RFC2543", 7, a.buf, a.len);
	
}

static void ag_rp_38(PCB_DECL, RvpStrPtrN tn, RvpStrPtrN a) {
/* Line 369, Z:/rv/sdp/rvsdpprs.syn */
 
		rvSdpParserAuxSaveAddr(PRS_STATE, "TN", 2, tn.buf, tn.len, a.buf, a.len);
	
}

#define ag_rp_62(PCB_POINTER, t, b) (rvSdpCommonFieldsSetBandwidthN(PRS_STATE->cur_sdp_fields,t.buf,t.len,b,PRS_ALLOC))

#define ag_rp_63(PCB_POINTER, start, stop) (rvSdpParseAuxAddSessionTime(PRS_STATE,start,stop))

#define ag_rp_64(PCB_POINTER, t) (rvSdpParseAuxAddSessionRepeatField(PRS_STATE,t))

#define ag_rp_65(PCB_POINTER, t) (rvSdpParseAuxSetRepeatActiveDuration(PRS_STATE,t))

#define ag_rp_66(PCB_POINTER, t) (rvSdpParseAuxAddRepeatOffset(PRS_STATE,t))

#define ag_rp_67(PCB_POINTER, t, tt) (rvSdpParseAuxAddZoneAdjustment(PRS_STATE,t,tt.time,tt.type))

#define ag_rp_68(PCB_POINTER, t, tt) (rvSdpParseAuxAddZoneAdjustment(PRS_STATE,t,tt.time*(-1),tt.type))

#define ag_rp_69(PCB_POINTER, t) (rvSdpParserAuxSetKeyN(PRS_STATE,t,empty_str,0))

#define ag_rp_70(PCB_POINTER, t) (rvSdpParserAuxSetKeyN(PRS_STATE,t,empty_str,0))

#define ag_rp_71(PCB_POINTER, t, d) (rvSdpParserAuxSetKeyN(PRS_STATE,t,d.buf,d.len))

#define ag_rp_74(PCB_POINTER, f, v) (rvSdpCommonFieldsAddAttrN(PRS_STATE->cur_sdp_fields,f.buf,f.len,v.buf,v.len,PRS_ALLOC))

#define ag_rp_75(PCB_POINTER, f) (rvSdpCommonFieldsAddAttrN(PRS_STATE->cur_sdp_fields,f.buf,f.len,"",0,PRS_ALLOC))

#define ag_rp_76(PCB_POINTER, p, n, r) (rvSdpCommonFieldsAddRtpMapN(PRS_STATE->cur_sdp_fields,p,n.buf,n.len,r,PRS_ALLOC))

⌨️ 快捷键说明

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