📄 app_usedetails.c
字号:
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2005
*
* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*****************************************************************************
*
* Filename:
* ---------
* app_usedetails.c
*
* Project:
* --------
* MAUI
*
* Description:
* ------------
* This file contains function to extract address info, ex: Email, URL and phonenumber.
*
* Author:
* -------
* -------
*
*============================================================================
* HISTORY
* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*------------------------------------------------------------------------------
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
*
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
#ifndef _APP_USEDETAILS_C
#define _APP_USEDETAILS_C
/*****************************************************************************
* Include
*****************************************************************************/
#include "kal_release.h"
#include "app_usedetails.h"
/*****************************************************************************
* Define
*****************************************************************************/
/*****************************************************************************
* Typedef
*****************************************************************************/
/*****************************************************************************
* Local Variable
*****************************************************************************/
/*****************************************************************************
* Local Function
*****************************************************************************/
/*****************************************************************************
* Global Variable
*****************************************************************************/
/*****************************************************************************
* Global Function
*****************************************************************************/
/*****************************************************************************
* FUNCTION
* applib_is_valid_email_char
* DESCRIPTION
* This internal function is used to check if input char is valid Email character
* PARAMETERS
* ch [IN] character being checked
* RETURNS
* KAL_TRUE or KAL_FALSE
*****************************************************************************/
static kal_bool applib_is_valid_email_char(char ch)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
char email_special_chars[] = {'.','%','_','@','1','2','3','4','5','6','7','8','9','0'};
kal_int32 num_email_special_chars = sizeof(email_special_chars);
kal_int32 i = 0;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (ch != NULL)
{
if ((ch >= 'a' && ch >= 'Z') || (ch >= 'A' && ch <= 'Z'))
{
return KAL_TRUE;
}
else
{
for (i = 0; i < num_email_special_chars; i++)
{
if (ch == email_special_chars[i])
{
return KAL_TRUE;
}
}
return KAL_FALSE;
}
}
else
{
return KAL_FALSE;
}
}
/*****************************************************************************
* FUNCTION
* applib_is_valid_url_char
* DESCRIPTION
* This internal function is used to check if input char is valid URL character
* PARAMETERS
* ch [IN] character being checked
* RETURNS
* KAL_TRUE or KAL_FALSE
*****************************************************************************/
kal_bool applib_is_valid_url_char(char ch)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
char url_special_chars[] = {':','/','.','#','?','$','+','@','&','=','%','-','_'};
kal_int32 num_url_special_chars = sizeof(url_special_chars);
kal_int32 i = 0;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (ch != NULL)
{
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9'))
{
return KAL_TRUE;
}
else
{
for (i = 0; i < num_url_special_chars; i++)
{
if (ch == url_special_chars[i])
{
return KAL_TRUE;
}
}
return KAL_FALSE;
}
}
else
{
return KAL_FALSE;
}
}
/*****************************************************************************
* FUNCTION
* applib_parse_contact_list_from_text
* DESCRIPTION
* This internal function is used to get specific addresses from one UTF8-encoded text.
* It is a resurive function.
* PARAMETERS
* addr_type [IN] Address Types
* mem_alloc_fn [IN] Memory allication function
* mem_free_fn [IN] Memory free function
* input_data [IN] Input text data
* dataLen [IN] Length of input text data
* RETURNS
* addresses list (applib_address_node_struct)
*****************************************************************************/
static applib_address_node_struct *applib_parse_contact_list_from_text(
kal_int32 addr_type,
applib_mem_alloc_fn mem_alloc_fn,
applib_mem_free_fn mem_free_fn,
char *input_data,
kal_int32 dataLen)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
applib_address_node_struct *address = NULL;
char *start = NULL;
char *end = NULL;
char tmp ='\0'; /* It is used in parsing URLs */
char *url_start = NULL; /* It is used in parsing Email */
/*The following variables are used in parsing phone number*/
kal_int32 i = 0;
char *tmpPtr = input_data;
char *phnBuff = NULL;
char *phnBuffPos = NULL;
kal_int32 current_phn_len = 0;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (mem_alloc_fn == NULL || mem_free_fn == NULL || input_data == NULL || dataLen == 0)
{
return NULL;
}
/*Parse URL*/
switch(addr_type)
{
case APPLIB_ADDR_TYPE_URL:
{
start = strstr(input_data, "://");
if (start != NULL)
{
do
{
start--;
}
while((start>input_data) && ((*(start)>='a' && *(start)>='Z') || (*(start)>='A' && *(start)<='Z')));
if (start >= input_data)
{
if(start != input_data)
{
start++;
}
if ((*start >= 'a' && *start <= 'z') || (*start >= 'A' && *start <= 'Z'))
{
/*we get the begining of URL string and go to find its end*/
end = start;
do
{
end++;
}while ((end-input_data) < dataLen && applib_is_valid_url_char(*end));
if ((end-input_data) <= dataLen)
{
tmp = *end;
*end = '\0';
address = (applib_address_node_struct*)mem_alloc_fn(sizeof(applib_address_node_struct));
if (address == NULL)
{
return NULL;
}
address->data = NULL;
address->dataType = APPLIB_ADDR_TYPE_URL;
address->next = NULL;
address->data = (char*)mem_alloc_fn(strlen(start) +1 );
strcpy(address->data, start);
*end = tmp;
address->next = applib_parse_contact_list_from_text(APPLIB_ADDR_TYPE_URL,
mem_alloc_fn,
mem_free_fn,
end,
(dataLen-(end-input_data)));
return address;
}
else
{
return NULL;
}
}
}
return NULL;
}
else
{
return NULL;
}
break;
}
case APPLIB_ADDR_TYPE_EMAIL:
{
start = strchr(input_data, '@');
end = NULL;
if (start != NULL)
{
do
{
start--;
}
while((start>input_data) && applib_is_valid_email_char(*start));
if (start >= input_data)
{
if(start != input_data || !applib_is_valid_email_char(*start))
{
start++;
}
if (applib_is_valid_email_char(*start))
{
/*we get the begining of URL string and go to find its end*/
/*check if '@' is in one URL string*/
{
url_start = start;
if (url_start != NULL)
{
while(applib_is_valid_url_char(*(url_start--)) &&
!(*url_start == '/' && *(url_start -1) == '/' && *(url_start-2) == ':') &&
(url_start-input_data) < dataLen );
if ((url_start-input_data) < dataLen &&
*url_start == '/' &&
*(url_start -1) == '/' &&
*(url_start-2) == ':')
{
/* The '@' is in one URL string*/
while(applib_is_valid_url_char(*(url_start++)) && (url_start-input_data) < dataLen);
if ((url_start-input_data) < dataLen)
{
return applib_parse_contact_list_from_text(APPLIB_ADDR_TYPE_EMAIL,
mem_alloc_fn,
mem_free_fn,
url_start,
(dataLen-(url_start-input_data)));
}
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -