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

📄 wml_uafn.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
-------------------------------------------------------------*/
void* SDL_CreateExtendedRequestStruct( void* pWAEInObject, void* pInUserAgent, void* pActiveElement, void* pbURL, void* pAccept, void* pInHistoryElement)
{
    GOELEMENT* pGoElement=NULL;
	UA* pUser=NULL;
    URLREQSTRUCT* pURLStruct=NULL;  
	HISTORYITEM* pHistoryElement;
    pURLStruct = New_URLREQSTRUCT();

    pWAEInObject = pWAEInObject;

    pHistoryElement = (HISTORYITEM*)pInHistoryElement;

	if (!pURLStruct)
		return NULL;

    pURLStruct->iMethod = M_Get;   /*default method */

	if (pActiveElement)
	{
	   if ( ((ELEMENTTYPE*)pActiveElement)->iType == Type_GO )
	   {
	 	  pGoElement = (GOELEMENT*)(pActiveElement);  
		  if (pGoElement->fSendRef)
		  {
		     pUser = (UA*)pInUserAgent;
		     /* referring URL */
		     pURLStruct->pbReferer = b_MinRelativePath ((BYTE*)pbURL, pUser->pbURLBase, TRUE);
		  }
	   }
	}

	if (pHistoryElement)
	{
        if (pHistoryElement->iPostDataLength)
		{
		    pURLStruct->pbBody = NEWARRAY(BYTE,pHistoryElement->iPostDataLength);
			B_COPYSTRINGN(pURLStruct->pbBody,pHistoryElement->pbPostData,pHistoryElement->iPostDataLength);  
	        pURLStruct->iBodyLength = pHistoryElement->iPostDataLength;
		}
		pURLStruct->iMethod = pHistoryElement->iMethod;
		pURLStruct->iContentType = pHistoryElement->iContentType;
		pURLStruct->iContentCharSet = pHistoryElement->iContentCharSet;
	}

    /* the URL that represents this request */
    pURLStruct->pbURL = (BYTE*)GenCopyString(1, pbURL);
    /* the content-types that are accepted by this request */
    pURLStruct->pbAccept= (BYTE*)GenCopyString(1,pAccept);

    #ifdef WAE_DEBUG
 	  PrintChar("New Request");
	  PrintChar((CHAR*)pURLStruct->pbURL);
	  PrintChar((CHAR*)pURLStruct->pbAccept);
    #endif

	return pURLStruct;
}



/*---------------------------------------------
Runs updates on all
external variables input variables
Returns the number of signals
----------------------------------------------*/
int SDL_SendSignalsInputVariables(void *pUser, void *pList)
{
   void* pListElm=NULL;

   /*broadcast a getInputString */
   pListElm = SDL_GetNextListElement(pList,NULL);

   while (pListElm!=NULL)
   {
     MMIa_getInputString( (UINT8)((UA*)pUser)->iViewID, (UINT8)SDL_GetListElementID(pListElm) );
     pListElm = SDL_GetNextListElement(pList,pListElm);
   }
   return SDL_GetCardinal(pList);
}

WCHAR* getLang(void* pElement, UINT16 iType)
{
	WCHAR* pLang=NULL;

	if (!pElement)
		return NULL;

	switch (iType)
	{
		case Type_WML:
			pLang = ((WMLELEMENT*)pElement)->pwchXmlLang;
			break;
		case Type_CARD:
			pLang = ((CARDELEMENT*)pElement)->pwchXmlLang;
			break;
		case Type_DO:
			pLang = ((DOELEMENT*)pElement)->pwchXmlLang; 
			break;
		case Type_SELECT:
			pLang = ((SELECTELEMENT*)pElement)->pwchXmlLang; 
			break;
		case Type_OPTGROUP:
			pLang = ((OPTGROUPELEMENT*)pElement)->pwchXmlLang; 
			break;
		case Type_OPTION:
			pLang = ((OPTIONELEMENT*)pElement)->pwchXmlLang; 
			break;
		case Type_INPUT:
			pLang = ((INPUTELEMENT*)pElement)->pwchXmlLang; 
			break;
		case Type_FIELDSET:
			pLang = ((FIELDSETELEMENT*)pElement)->pwchXmlLang; 
			break;
		case Type_IMG:
			pLang = ((IMGELEMENT*)pElement)->pwchXmlLang; 
			break;
		case Type_A:
			pLang = ((AELEMENT*)pElement)->pwchXmlLang; 
			break;
		case Type_ANCHOR:
			pLang = ((ANCHORELEMENT*)pElement)->pwchXmlLang; 
			break;
		case Type_TABLE:
			pLang = ((TABLEELEMENT*)pElement)->pwchXmlLang; 
			break;
		case Type_TD:
			pLang = ((TDELEMENT*)pElement)->pwchXmlLang; 
			break;
		case Type_BR:
			pLang = ((BRELEMENT*)pElement)->pwchXmlLang; 
			break;
		case Type_P:
			pLang = ((PELEMENT*)pElement)->pwchXmlLang; 
			break;
		case Type_B:
		case Type_BIG:
		case Type_EM:
		case Type_I:
		case Type_SMALL:
		case Type_STRONG:
		case Type_U:
			pLang = ((EMPHELEMENT*)pElement)->pwchXmlLang; 
			break;
		default:
			break;
   }
	return pLang;
}

void SDL_UpdateLanguage(UINT8 iViewID, void* pElement, void* pPrevElement,void* pLanguageStack )
{
	WCHAR* pLang=NULL;
	BYTE* pbLanguage = NULL;
    BOOL fDummy;
	void* pTemp;
	UINT16 iType=0;

	   /* if the previous element was a lang remove from stack */
	if (pPrevElement && pLanguageStack && pPrevElement == SDL_CheckLIFOStack( pLanguageStack ) )
	{
        pTemp = SDL_POPLIFOStack( pLanguageStack );
		pTemp = SDL_CheckLIFOStack( pLanguageStack );
		iType = ((ELEMENTTYPE*)pTemp)->iType;
		pLang = getLang(pTemp, iType);
		if (pLang)
          pbLanguage =  wip_wchar2byte(pLang ,& fDummy );
        MMIa_setLanguage (iViewID, (const char *)pbLanguage);
	}

	if (!pElement)
		return;

	iType = ((ELEMENTTYPE*)pElement)->iType;

	if (isTypeWMLText(iType))
		return;

	pLang = getLang(pElement, iType);

       /* if the current element has a lang put on stack */
	if (pLang)
    {
      DEALLOC(& pbLanguage);
      pbLanguage =  wip_wchar2byte(pLang ,& fDummy );
      MMIa_setLanguage (iViewID, (const char *)pbLanguage);
	  DEALLOC(& pbLanguage);
      SDL_PUSHLIFOStack( pLanguageStack, pElement );
    }
	else if (pbLanguage)
	{
	  DEALLOC(& pbLanguage); 
      MMIa_setLanguage (iViewID, NULL);
	}
}


int SDL_UpdateInputVariables(void *pUserAgent, void* pInputElementList, int iInputID, void* pwchTheInputString)
{
   UA   *pUser;
   ELEMENTTYPE  *pTheElement=NULL;

   pUser = (UA*)pUserAgent;
   pTheElement = SDL_SearchListElement(pInputElementList, iInputID, NULL);

   if (pTheElement)
   {
      #ifdef WAE_DEBUG
        PrintChar("Update Input variable");
        WMLUA_PrintWS(pwchTheInputString);
      #endif
      pTheElement = SDL_GetListElementContent(pTheElement);
      WML_SetInputKeyValue (pUser, pTheElement, (WCHAR*)pwchTheInputString);
      return TRUE;
   }
   else
      return FALSE;
}

void SDL_SetSelectDefault ( void *pTheElement , void *pUser )
{
   BOOL fDummy;
   fDummy = WML_SetSelectDefault ( (ELEMENTTYPE*)pTheElement , (UA*)pUser );
}

void SDL_UpdateAllSelect (void* pCard, void* pUser)
{
   BOOL fDummy;
   fDummy = WML_UpdateAllSelect ( (ELEMENTTYPE*)pCard , (UA*)pUser );
}

UINT16 WSP2HTTPStatusConvert(UINT8 iWSPNbr)
{
	UINT16 iResult=0;
	if (iWSPNbr < 0x60)
      iResult = (UINT16)(( (( iWSPNbr >> 4) & 0x0f) * 100) + (iWSPNbr & 0x0f));
    else
      iResult = (UINT16)(500 + (iWSPNbr & 0x0f));	  

   return iResult;
}

/*---------------------------------------------------------------------------------------*/

/* changes the state for the MMIUserAgent, also affects the User Input */
void SDL_SetMMIUserAgentLocked(void* pUser, BOOL fMMILock)
{
  ((UA*)pUser)->fLockMMI = fMMILock;
  if (fMMILock)
    SDL_SetUserInputLocked(pUser, TRUE);
}

/* Changes the UserInputState. (only if the value in fact has changed) 
NOTE: when the MMIUserAgent is locked that value overrides the inputvalue */

void SDL_SetUserInputLocked(void* pUser, BOOL fWait)
{
   if ( ((UA*)pUser)->fUserInputMode != fWait)	/* change is needed */
   {
     if ( fWait == TRUE || ((UA*)pUser)->fLockMMI == FALSE )
     {
       ((UA*)pUser)->fUserInputMode = fWait;
       MMIa_wait( (UINT8)((UA*)pUser)->iViewID, fWait);
     }
   }
}

void SDL_ToggleLoadIcon(void* pUser, BOOL fLoad, BYTE* pRequestURL)
{
   if ( ((UA*)pUser)->fUserLoadMode != fLoad)	/* change is needed */
   {
      ((UA*)pUser)->fUserLoadMode = fLoad;
	  if (fLoad)
	    SDL_OutputStatus(pUser, LoadingData, pRequestURL );
	  else
	    SDL_OutputStatus(pUser, LoadingDataDone, pRequestURL );
   }

}

int SDL_MMILocked(void* pUser)
{
  return ((UA*)pUser)->fLockMMI;
}

void* SDL_Normalise(void* pTheUA, void* pURL)
{
   BYTE *pbResult = NULL;
   BYTE *pbTemp = NULL;
   if (pURL)
   {
	  if (pTheUA){
		  pbTemp = b_EscapeBlanks( pURL );
		  b_Resolve (((UA*)pTheUA)->pbURLBase, pbTemp, & pbResult);
		  DEALLOC(&pbTemp);
	  }
      else
      {
         WML_TrimTextBYTE ((BYTE*)pURL, TRIMTEXT_BOTH);
         pbResult = b_CompleteURLHeuristically((BYTE*)pURL);
      }
   }
   return pbResult;
}


int SDL_GetScheme(void* pURL)
{
   BYTE* pbScheme=NULL;
   int iScheme = Scheme_empty;

   if (pURL!=NULL)
   {
     if (b_GetScheme ((BYTE*)pURL, & pbScheme))
	 {
		if (pbScheme)
          iScheme = (int)Scheme_FromString (pbScheme);
     }
     DEALLOC(& pbScheme);
   }
   return iScheme;
}

int SDL_CheckIfPost(void* pTaskElement)
{
   if (pTaskElement!=NULL)
   {
     if (((ELEMENTTYPE*)pTaskElement)->iType==Type_GO)
     {
          /* if it磗 a go element that has initiated the request */
         if (  ((GOELEMENT*)(pTaskElement))->iMethod == M_Post )  /* TODOjens pElm */
             return TRUE;
     }
   }
   return FALSE;
}

int SDL_CheckIfReload(void* pTaskElement)
{
   if (pTaskElement!=NULL)
   {
     if (((ELEMENTTYPE*)pTaskElement)->iType==Type_GO)
     {
         if (  ((GOELEMENT*)(pTaskElement))->iCacheControl == Cache_nocache )
             return TRUE;
     }
   }
   return FALSE;
}

int SDL_URLOnSameDeck(void *pUserAgent,void* pInURL)
{
   BOOL res =FALSE;
   #ifdef WAE_DEBUG
     PrintChar("Compare :");
     PrintChar("Current URL:");
     PrintChar(((UA*)pUserAgent)->pbURLBase);
     PrintChar("New URL:");
     PrintChar(pInURL);
   #endif
   if (((UA*)pUserAgent)->pbURLBase && pInURL)
   {
     res = b_EqualURL ( ((UA*)pUserAgent)->pbURLBase, (BYTE*)pInURL, ALL_COMP ^ FRAG_COMP); /* compare without frag */
   }
  return res;
}

void SDL_About(void* pTheUA, void* pReqURL)
{
    const WCHAR pInfoString[]={'-','A','U','S',' ','W','A','P',' ','E','n','g','i','n','e','-',0};
    UINT8 iViewID;
    WCHAR *pwchText=NULL; 
    if (pReqURL && pTheUA)
    {
       iViewID = (UINT8)(((UA*)pTheUA)->iViewID);
/*
       if (B_STRSTRING( (BYTE*)pReqURL, (BYTE*)"wapengine"))
*/
       if (strstr( pReqURL, "wapengine"))
	   {
         WCHAR **AboutStrings2Wchar(const CHAR *);
         WCHAR **ppVersionStr = AboutStrings2Wchar((const CHAR *)pReqURL);
         WCHAR **iVersionStr = ppVersionStr;

	     MMIa_newCard(iViewID, NULL, 0, 0, NULL, TRUE, NULL);
     	 MMIa_newParagraph (iViewID,ALIGN_LEFT,TRUE,FALSE);
		 MMIa_newText (iViewID, 0, pInfoString,FALSE,NULL,0, 0);
		 MMIa_newBreak (iViewID);
	     while (*iVersionStr != NULL)
		 {
            pwchText = *iVersionStr;
            MMIa_newText (iViewID, 0, pwchText, FALSE,NULL,0, 0);
			MMIa_newBreak (iViewID );
			DEALLOC( &pwchText);
 	        iVersionStr++;
		 }
         DEALLOC( &ppVersionStr);
		 MMIa_closeParagraph (iViewID);
         MMIa_showCard(iViewID);
	   }
	}
}

void* SDL_URLGetFragment(void* pTheURL)
{
    BYTE    *pbResultString=NULL;
    if (pTheURL)
        b_GetFragment((BYTE*)pTheURL, & pbResultString);
    return (void*)pbResultString;
}


/*------------------------------------------------------------------------------------------------
                                     WTAI extensions
-------------------------------------------------------------------------------------------------*/

/*-------------------------------------------------------------------
Check if the provided URL is a valid WTA URI function.
If so corresponding adapter function is called.

Output: WTAI_URI_NO_FUNCTION  - no URI function found.
        WTAI_URI_FUNCTION     - URI function found,
                                adapter function called.
        WTAI_URI_END_CONTEXT  - the URI function 'endContext',
                                handle outside this function.

NOTE!  There is no checking of useragent type.
       The caller of this function must perform this control!
       (Currently all URI functions except 'endContext' are public).
--------------------------------------------------------------------*/

int SDL_CallWTAIURI( int objectId, void* pURL)
{
  BYTE* pWTAIFunction=NULL;
  BYTE* pWTAISubFunction=NULL;
  BYTE* pWTAINumber=NULL;
  BYTE* pTempWTAINumber=NULL;
  WCHAR* pwchName = NULL;
  BYTE* pbTemp=NULL;
  int iRet= WTAI_URI_NO_FUNCTION;

  if (pURL && b_GetHost ((BYTE*)pURL, & pWTAIFunction) && b_GetPath ((BYTE*)pURL, & pWTAISubFunction) && b_GetParameters ((BYTE*)pURL, & pWTAINumber) )
  {
    /* Check is function and subfunction is present,
       all URI functions must have these. */
    if ( pWTAIFunction && pWTAISubFunction )
    {
      /* Check if number section is present */
      if (pWTAINumber)
      {
        BYTE* pWTAIFrag=NULL;

        b_GetFragment ((BYTE*)pURL, & pWTAIFrag);

        /* Append fragmet if existing, this is done to accept
           the '#' sign in dtmf sequences and phone numbers   */
        if (pWTAIFrag != NULL)
        {
          INT16 len;
          BYTE* pTmpArray;

          len = (INT16)B_STRINGLENGTH((const char *)pWTAINumber);
          pTmpArray = NEWARRAY (BYTE, (len + B_STRINGLENGTH((const char *)pWTAIFrag) +2));
          B_COPYSTRING((char *)pTmpArray, (const char *)pWTAINumber);
          pTmpArray[len] =

⌨️ 快捷键说明

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