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

📄 decompile.c

📁 The Kannel Open Source WAP and SMS gateway works as both an SMS gateway, for implementing keyword b
💻 C
📖 第 1 页 / 共 3 页
字号:
	return ((Is_switchPage(buffer) &&		     (IsTag(&tmpbuffer, TAG_EXT_0) ||		      IsTag(&tmpbuffer, TAG_EXT_1) ||		      IsTag(&tmpbuffer, TAG_EXT_2) ||		      IsTag(&tmpbuffer, TAG_EXT_T_0) ||		      IsTag(&tmpbuffer, TAG_EXT_T_1) ||		      IsTag(&tmpbuffer, TAG_EXT_T_2) ||		      IsTag(&tmpbuffer, TAG_EXT_I_0) ||		      IsTag(&tmpbuffer, TAG_EXT_I_1) ||		      IsTag(&tmpbuffer, TAG_EXT_I_2))) ||		    (IsTag(buffer, TAG_EXT_0) ||		     IsTag(buffer, TAG_EXT_1) ||		     IsTag(buffer, TAG_EXT_2) ||		     IsTag(buffer, TAG_EXT_T_0) ||		     IsTag(buffer, TAG_EXT_T_1) ||		     IsTag(buffer, TAG_EXT_T_2) ||		     IsTag(buffer, TAG_EXT_I_0) ||		     IsTag(buffer, TAG_EXT_I_1) ||		     IsTag(buffer, TAG_EXT_I_2)));}BOOL Is_string     (P_WBXML_INFO buffer){	return (Is_inline(buffer) ||		    Is_tableref(buffer));}BOOL Is_switchPage (P_WBXML_INFO buffer){	return IsTag(buffer, TAG_SWITCH_PAGE);}BOOL Is_inline     (P_WBXML_INFO buffer){	return IsTag(buffer, TAG_STR_I);}BOOL Is_tableref   (P_WBXML_INFO buffer){	return IsTag(buffer, TAG_STR_T);}BOOL Is_entity     (P_WBXML_INFO buffer){	return IsTag(buffer, TAG_ENTITY);}BOOL Is_pi         (P_WBXML_INFO buffer){	return IsTag(buffer, TAG_PI);}BOOL Is_opaque     (P_WBXML_INFO buffer){	return IsTag(buffer, TAG_OPAQUE);}BOOL Is_zero(P_WBXML_INFO buffer){  BOOL result = FALSE;  if (buffer)   {    if (BytesLeft(buffer) >= 1)     {      result = ((*buffer->m_curpos) == 0);    }    else    {      ParseError(ERR_END_OF_DATA);    }  }  else  {    ParseError(ERR_INTERNAL_BAD_PARAM);  }  return result;}/*********************** * Basic Type Decoders * ***********************/void Read_u_int8(P_WBXML_INFO buffer, P_WBXML_U_INT8 result){  if (buffer && result)  {    if (BytesLeft(buffer) >= 1)     {      *result = *(buffer->m_curpos);      (buffer->m_curpos)++;    }    else    {      ParseError(ERR_END_OF_DATA);    }  }  else  {    ParseError(ERR_INTERNAL_BAD_PARAM);  }}void Read_mb_u_int32(P_WBXML_INFO buffer, P_WBXML_MB_U_INT32 result){  if (buffer && result)  {    int i;    for (i = 0; i < MAX_MB_U_INT32_BYTES; i++)    {      if (BytesLeft(buffer) >= 1)      {        (*result)[i] = *(buffer->m_curpos);        (buffer->m_curpos)++;        if ( !( (*result)[i] & 0x80 ) )          break;      }      else      {        ParseError(ERR_END_OF_DATA);      }    }  }  else  {    ParseError(ERR_INTERNAL_BAD_PARAM);  }}void Read_bytes(P_WBXML_INFO buffer, WBXML_LENGTH length, P_WBXML_BYTES result){  if (buffer && result)  {    if (BytesLeft(buffer) >= length)     {      *result = (WBXML_BYTES) malloc(length*sizeof(unsigned char));      memcpy(*result, buffer->m_curpos, length);      buffer->m_curpos += length;    }    else    {      ParseError(ERR_END_OF_DATA);    }  }  else  {    ParseError(ERR_INTERNAL_BAD_PARAM);  }}void ReadFixedTag(P_WBXML_INFO buffer, WBXML_TAG tag){  if (buffer)  {    if (BytesLeft(buffer) >= sizeof(WBXML_TAG))    {      if ((*((WBXML_TAG*) buffer->m_curpos)) == tag)      {        buffer->m_curpos += sizeof(WBXML_TAG);      }      else      {        ParseError(ERR_TAG_NOT_FOUND);      }    }    else    {      ParseError(ERR_END_OF_DATA);    }  }  else  {    ParseError(ERR_INTERNAL_BAD_PARAM);  }}WBXML_TAG ReadCodepageTag (P_WBXML_INFO buffer, CP_TAG_TYPE type){  WBXML_TAG tag = 0;  if (buffer)  {    if (BytesLeft(buffer) >= sizeof(WBXML_TAG))    {      tag = *((WBXML_TAG*) buffer->m_curpos);	  switch (type)	  {	    case CP_TAG_TAG:		  buffer->m_curpos += sizeof(WBXML_TAG);		  break;		case CP_TAG_ATTRSTART:		  if ((tag & 0x80) != 0x80)		  {		    buffer->m_curpos += sizeof(WBXML_TAG);		  }		  else		  {			  ParseError(ERR_TAG_NOT_FOUND);		  }		  break;		case CP_TAG_ATTRVALUE:		  if ((tag & 0x80) == 0x80)		  {		    buffer->m_curpos += sizeof(WBXML_TAG);		  }		  else		  {			  ParseError(ERR_TAG_NOT_FOUND);		  }		  break;		default:		  ParseError(ERR_TAG_NOT_FOUND);		  break;      }    }    else    {      ParseError(ERR_END_OF_DATA);    }  }  else  {    ParseError(ERR_INTERNAL_BAD_PARAM);  }  return tag;}/************************** * Basic Type Conversions * **************************/long mb_u_int32_to_long(P_WBXML_MB_U_INT32 value){  long result = 0;  if (value)  {    int i;    for (i = 0; i < MAX_MB_U_INT32_BYTES; i++)    {      result <<= 7;      result |= ((*value)[i] & 0x7f);      if ( !( (*value)[i] & 0x80 ) )        break;    }  }  else  {    ParseError(ERR_INTERNAL_BAD_PARAM);  }  return result;}static void OutputEncodedString(const unsigned char* str){	/* Work our way down the string looking for illegal chars */	while (*str != 0)	{		if ((*str < 0x20) || (*str > 0x7F))		{			/* Out of range... encode */			printf("&#x%02x;", *str);		}		else		{			switch (*str)			{				case '<':				case '>':				case '&':				case '\'':				case '\"':					/* Special symbol... encode */					printf("&#x%2x", *str);					break;				default:					printf("%c", *str);					break;			}		}		str++;	}}/******************************* * Document Structure Decoders * *******************************/void Read_start      (P_WBXML_INFO buffer){  Read_version(buffer);  Read_publicid(buffer);  Read_charset(buffer);  Read_strtbl(buffer);  Read_body(buffer);}void Read_strtbl     (P_WBXML_INFO buffer){  WBXML_STRING_TABLE result;  Read_mb_u_int32(buffer, &(result.m_length));  Read_bytes(buffer, mb_u_int32_to_long(&(result.m_length)), &(result.m_strings));  AddStringTableNode(buffer, &result);}void Read_body       (P_WBXML_INFO buffer){  while (Is_pi(buffer))  {    Read_pi(buffer);  }  Read_element(buffer);  while (Is_pi(buffer))  {    Read_pi(buffer);  }}void Read_element    (P_WBXML_INFO buffer){  WBXML_TAG stagvalue = 0;  if (Is_switchPage(buffer))  {    Read_switchPage(buffer);  }  stagvalue = Read_stag(buffer);  /* move the current node down to this one in the tree */  if (buffer->m_curnode)	  buffer->m_curnode = buffer->m_curnode->m_child;  else buffer->m_curnode = buffer->m_tree;  if ((stagvalue & CODEPAGE_TAG_HAS_ATTRS) == CODEPAGE_TAG_HAS_ATTRS)  {    do    {      Read_attribute(buffer);    } while (!IsTag(buffer, TAG_END));    ReadFixedTag(buffer, TAG_END);	AddAttrEndNode(buffer);  }  if ((stagvalue & CODEPAGE_TAG_HAS_CONTENT) == CODEPAGE_TAG_HAS_CONTENT)  {    while (!IsTag(buffer, TAG_END))	{      Read_content(buffer);	}    ReadFixedTag(buffer, TAG_END);  }  /* move the current node back up one */  buffer->m_curnode = buffer->m_curnode->m_parent;}void Read_content    (P_WBXML_INFO buffer){	if (Is_string(buffer))	{		Read_string(buffer);	}	else if (Is_extension(buffer))	{		Read_extension(buffer);	}	else if (Is_entity(buffer))	{		Read_entity(buffer);	}	else if (Is_pi(buffer))	{		Read_pi(buffer);	}	else if (Is_opaque(buffer))	{		Read_opaque(buffer);	}	else	{		/* Assume it is an element */		Read_element(buffer);	}}WBXML_TAG Read_stag       (P_WBXML_INFO buffer){	if (IsCodepageTag(buffer, CP_TAG_TAG))	{		WBXML_TAG tag = ReadCodepageTag(buffer, CP_TAG_TAG);		AddCodepageTagNode(buffer, tag);		return tag;	}	else if (IsTag(buffer, TAG_LITERAL))	{		WBXML_MB_U_INT32 index;		ReadFixedTag(buffer, TAG_LITERAL);		Read_index(buffer, &index);		AddCodepageLiteralTagNode(buffer, index);	}	else	{		ParseError(ERR_TAG_NOT_FOUND);	}	return 0;}void Read_attribute  (P_WBXML_INFO buffer){	Read_attrStart(buffer);	while (Is_attrValue(buffer))	{		Read_attrValue(buffer);	}}void Read_attrStart  (P_WBXML_INFO buffer){  if (Is_switchPage(buffer))  {	WBXML_TAG tag;    Read_switchPage(buffer);    tag = ReadCodepageTag(buffer, CP_TAG_ATTRSTART);	AddAttrStartNode(buffer, tag);  }  else if (IsCodepageTag(buffer, CP_TAG_ATTRSTART))  {	WBXML_TAG tag;    tag = ReadCodepageTag(buffer, CP_TAG_ATTRSTART);	AddAttrStartNode(buffer, tag);  }  else if (IsTag(buffer, TAG_LITERAL))  {    WBXML_MB_U_INT32 index;    ReadFixedTag(buffer, TAG_LITERAL);    Read_index(buffer, &index);	AddAttrStartLiteralNode(buffer, index);  }  else  {    ParseError(ERR_TAG_NOT_FOUND);  }}void Read_attrValue  (P_WBXML_INFO buffer){  if (Is_switchPage(buffer))  {	WBXML_TAG tag;    Read_switchPage(buffer);    tag = ReadCodepageTag(buffer, CP_TAG_ATTRVALUE);	AddAttrValueNode(buffer, tag);  }  else if (IsCodepageTag(buffer, CP_TAG_ATTRVALUE))  {	WBXML_TAG tag;    tag = ReadCodepageTag(buffer, CP_TAG_ATTRVALUE);	AddAttrValueNode(buffer, tag);  }  else if (Is_string(buffer))  {    Read_string(buffer);  }  else if (Is_extension(buffer))  {    Read_extension(buffer);  }  else if (Is_entity(buffer))  {    Read_entity(buffer);  }  else if (Is_opaque(buffer))  {    Read_opaque(buffer);  }  else  {    ParseError(ERR_TAG_NOT_FOUND);  }}void Read_extension  (P_WBXML_INFO buffer){	if (Is_switchPage(buffer))	{		Read_switchPage(buffer);	}	if (IsTag(buffer, TAG_EXT_I_0))	{		char* str = NULL;		ReadFixedTag(buffer, TAG_EXT_I_0);		Read_termstr_rtn(buffer, &str);		AddVariableStringNode(buffer, str, VAR_ESCAPED); 	}	else if (IsTag(buffer, TAG_EXT_I_1))	{		char* str = NULL;		ReadFixedTag(buffer, TAG_EXT_I_1);		Read_termstr_rtn(buffer, &str);		AddVariableStringNode(buffer, str, VAR_UNESCAPED); 	}	else if (IsTag(buffer, TAG_EXT_I_2))	{		char* str = NULL;		ReadFixedTag(buffer, TAG_EXT_I_2);		Read_termstr_rtn(buffer, &str);		AddVariableStringNode(buffer, str, VAR_UNCHANGED); 	}	else if (IsTag(buffer, TAG_EXT_T_0))	{		WBXML_MB_U_INT32 index;		ReadFixedTag(buffer, TAG_EXT_T_0);		Read_index(buffer, &index);		AddVariableIndexNode(buffer, index, VAR_ESCAPED);	}	else if (IsTag(buffer, TAG_EXT_T_1))	{		WBXML_MB_U_INT32 index;		ReadFixedTag(buffer, TAG_EXT_T_1);		Read_index(buffer, &index);		AddVariableIndexNode(buffer, index, VAR_UNESCAPED);	}	else if (IsTag(buffer, TAG_EXT_T_2))	{		WBXML_MB_U_INT32 index;		ReadFixedTag(buffer, TAG_EXT_T_2);		Read_index(buffer, &index);		AddVariableIndexNode(buffer, index, VAR_UNCHANGED);	}	else if (IsTag(buffer, TAG_EXT_0))	{		ReadFixedTag(buffer, TAG_EXT_0);		ParseWarning(WARN_FUTURE_EXPANSION_EXT_0);	}	else if (IsTag(buffer, TAG_EXT_1))	{		ReadFixedTag(buffer, TAG_EXT_1);		ParseWarning(WARN_FUTURE_EXPANSION_EXT_1);	}	else if (IsTag(buffer, TAG_EXT_2))	{		ReadFixedTag(buffer, TAG_EXT_2);		ParseWarning(WARN_FUTURE_EXPANSION_EXT_2);	}	else	{		ParseError(ERR_TAG_NOT_FOUND);	}}void Read_string     (P_WBXML_INFO buffer){	if (Is_inline(buffer))	{		Read_inline(buffer);	}	else if (Is_tableref(buffer))	{		Read_tableref(buffer);	}	else	{		ParseError(ERR_TAG_NOT_FOUND);	}}void Read_switchPage (P_WBXML_INFO buffer){  WBXML_U_INT8 pageindex;  ReadFixedTag(buffer, TAG_SWITCH_PAGE);  Read_pageindex(buffer, &pageindex);  /* Use the new codepage */  buffer->m_curpage = pageindex;}void Read_inline     (P_WBXML_INFO buffer){	ReadFixedTag(buffer, TAG_STR_I);	Read_termstr(buffer);}void Read_tableref   (P_WBXML_INFO buffer)

⌨️ 快捷键说明

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