wap_events.c

来自「mms client」· C语言 代码 · 共 193 行

C
193
字号
/* * wap_events.c - functions for manipulating wapbox events * * Aarno Syv鋘en * Lars Wirzenius */#include "gwlib/gwlib.h"#include "wsp_caps.h"#include "wap_events.h"#include "wtls_pdu.h"WAPEvent *wap_event_create(WAPEventName type) {	WAPEvent *event;		gw_assert(type >= 0);	gw_assert(type < WAPEventNameCount);	event = gw_malloc(sizeof(WAPEvent));	event->type = type;    /* ASL - MJ added priority to let the event be bumped to top of the queue */    event->priority = 0;	switch (event->type) {	#define WAPEVENT(name, prettyname, fields) \		case name: \			{ struct name *p = &event->u.name; fields } \			break;	#define OCTSTR(name) p->name = NULL;	#define OPTIONAL_OCTSTR(name) p->name = NULL;	#define INTEGER(name) p->name = 0;	#define WTLSPDUS(name) p->name = NULL;	#define HTTPHEADER(name) p->name = NULL;	#define ADDRTUPLE(name) p->name = NULL;	#define CAPABILITIES(name) p->name = NULL;    #define HTTP_CLIENT(name)	#include "wap_events.def"	default:		panic(0, "Unknown WAP event type %d", event->type);	}		return event;}void wap_event_destroy(WAPEvent *event) {	if (event == NULL)		return;	wap_event_assert(event);	switch (event->type) {	#define WAPEVENT(name, prettyname, fields) \		case name: \			{ struct name *p = &event->u.name; fields; } \			break;	#define OCTSTR(name) octstr_destroy(p->name);	#define OPTIONAL_OCTSTR(name) octstr_destroy(p->name);	#define INTEGER(name) p->name = 0;    #define WTLSPDUS(name) debug("wap.events",0,"You need to create wtls_pdulist_destroy!");	#define HTTPHEADER(name) http_destroy_headers(p->name);	#define ADDRTUPLE(name) wap_addr_tuple_destroy(p->name);	#define CAPABILITIES(name) wsp_cap_destroy_list(p->name);    #define HTTP_CLIENT(name)	#include "wap_events.def"	default:		panic(0, "Unknown WAPEvent type %d", (int) event->type);	}	gw_free(event);}void wap_event_destroy_item(void *event) {	wap_event_destroy(event);}WAPEvent *wap_event_duplicate(WAPEvent *event) {	WAPEvent *new;		if (event == NULL)		return NULL;	wap_event_assert(event);	new = gw_malloc(sizeof(WAPEvent));	new->type = event->type;	switch (event->type) {	#define WAPEVENT(name, prettyname, fields) \		case name: \			{ struct name *p = &new->u.name; \			  struct name *q = &event->u.name; \			  fields } \			break;	#define OCTSTR(name) p->name = octstr_duplicate(q->name);	#define OPTIONAL_OCTSTR(name) p->name = octstr_duplicate(q->name);	#define INTEGER(name) p->name = q->name;    #define WTLSPDUS(name) debug("wap.events",0,"You need to implement wtls_pdulist_duplicate!");	#define HTTPHEADER(name) p->name = http_header_duplicate(q->name);	#define ADDRTUPLE(name) p->name = wap_addr_tuple_duplicate(q->name);	#define CAPABILITIES(name) p->name = wsp_cap_duplicate_list(q->name);    #define HTTP_CLIENT(name)    #include "wap_events.def"	default:		panic(0, "Unknown WAP event type %d", event->type);	}		return new;}const char *wap_event_name(WAPEventName type) {	switch (type) {	#define WAPEVENT(name, prettyname, fields) \		case name: return prettyname;	#include "wap_events.def"	default:		panic(0, "Unknown WAPEvent type %d", (int) type);		return "unknown WAPEventName";	}}void wap_event_dump(WAPEvent *event) {	debug("wap.event", 0, "Dumping WAPEvent %p", (void *) event);	if (event != NULL) {		debug("wap.event", 0, "  type = %s", 			wap_event_name(event->type));		switch (event->type) {		#define WAPEVENT(name, prettyname, fields) \			case name: \			{ struct name *p = &event->u.name; fields; break; }		#define OCTSTR(name) \			debug("wap.event", 0, "%s =", #name); \			octstr_dump(p->name, 1);		#define OPTIONAL_OCTSTR(name) \			if (p->name == NULL) \				debug("wap.event", 0, "%s = NULL", #name); \			else { \				debug("wap.event", 0, "%s =", #name); \				octstr_dump(p->name, 1); \			}		#define INTEGER(name) \			debug("wap.event", 0, "  %s = %ld", #name, p->name);        #define WTLSPDUS(name) \			debug("wap.event",0,"You need to implement wtls_payloadlist_dump!");		#define HTTPHEADER(name) \			if (p->name == NULL) \				debug("wap.event", 0, "%s = NULL", #name); \			else \			    http_header_dump(p->name);		#define ADDRTUPLE(name)     wap_addr_tuple_dump(p->name);		#define CAPABILITIES(name)  wsp_cap_dump_list(p->name);        #define HTTP_CLIENT(name)		#include "wap_events.def"		default:			debug("wap.event", 0, "Unknown type");		}	}	debug("wap.event", 0, "WAPEvent dump ends.");}void wap_event_assert(WAPEvent *event) {	gw_assert(event != NULL),	gw_assert(event->type >= 0);	gw_assert(event->type < WAPEventNameCount);	switch (event->type) {#define WAPEVENT(name, prettyname, fields) \	case name: \	{ struct name *p = &event->u.name; fields; p = NULL; break; }#define OCTSTR(name) \	gw_assert(p->name != NULL); \	/* This is a trick to make the Octstr module run its assertions */ \	gw_assert(octstr_len(p->name) >= 0);#define OPTIONAL_OCTSTR(name) \	gw_assert(p->name == NULL || octstr_len(p->name) >= 0);#define INTEGER(name)#define WTLSPDUS(name)#define HTTPHEADER(name)#define ADDRTUPLE(name) \	gw_assert(p->name != NULL);#define CAPABILITIES(name)#define HTTP_CLIENT(name)#include "wap_events.def"	default:		debug("wap.event", 0, "Unknown type");	}}

⌨️ 快捷键说明

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