📄 phonebook.cpp
字号:
/*****************************************************************************
* 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).
*
*****************************************************************************/
/*
* Copyright Notice
* ?2002 - 2003, Pixtel Communications, Inc., 1489 43rd Ave. W.,
* Vancouver, B.C. V6M 4K8 Canada. All Rights Reserved.
* (It is illegal to remove this copyright notice from this software or any
* portion of it)
*
*/
/**************************************************************
FILENAME : PhoneBook.cpp
PURPOSE : PhoneBook Plugins for Network Simulator
REMARKS : nil
AUTHOR : Pranav, Gurinder
DATE : Jun 16,03
**************************************************************/
/* Header files require for PhoneBook.cpp */
#include "stdafx.h"
#include "string.h"
#include "stdlib.h"
#include "PhoneBookAPI.h"
#include "MemAllocator.h"
/* Global Variable Declearation */
U16 gTotalPbookEntry = 0;
U16 gTotalPbookEntryMSISDN = 0;
U16 gTotalPbookEntrySim=0;
U16 gTotalFDNEntries=0;
U16 gTotalPbookEntryPhone=0;
U16 gTotalPbookEntrySDN = 0;
/* Global Structure Decleartion */
PHB_STORAGE_LOCATION_ENUM PreferredStorageLocation = MMI_SIM;
PHB_ENTRY_STRUCT phbEntries[MAX_PB_ENTRIES];
PHB_ENTRY_STRUCT FDNEntries[MAX_PB_ENTRIES];
PHB_ENTRY_STRUCT phbEntriesSim[MAX_PB_ENTRIES_SIM];
PHB_ENTRY_STRUCT phbEntriesPhone[MAX_PB_ENTRIES_PHONE];
/* Global Message Stucture Declearation */
MSG_PHB_GET_ENTRY_BY_INDEX_RSP_STRUCT *greadByIndexRsp = NULL;
MSG_PHB_GET_ENTRY_BY_NAME_RSP_STRUCT *searchEntryRsp = NULL;
/* Global File Pointer to store PhoneBook Data */
FILE *pb;
void * gBuffer = NULL;
/*****************************************************************************
* FUNCTION
* HandleWriteEntryRequest
* DESCRIPTION
* This Plugin API write the incoming phone book entry request to phonebook
* database file. Incase number length is increased proper error is returned.
* PARAMETERS
* void
* RETURNS
* void * - MSG_PHB_SET_ENRTY_RSP_STRUCT is cast into void * to return to MMI
*****************************************************************************/
void *HandleWriteEntryRequest() {
MSG_PHB_SET_ENRTY_REQ_STRUCT *setEntryReq = (MSG_PHB_SET_ENRTY_REQ_STRUCT*)gBuffer;
MSG_PHB_SET_ENRTY_RSP_STRUCT *setEntryRsp;
U16 i;
setEntryRsp = (MSG_PHB_SET_ENRTY_RSP_STRUCT *)CMemAllocator::MyMallocDataPtr(sizeof(MSG_PHB_SET_ENRTY_RSP_STRUCT));
memset( setEntryRsp, '\0', sizeof(MSG_PHB_SET_ENRTY_RSP_STRUCT) );
setEntryRsp->result.flag = 0; //OK
/*Check the Phone Number Length for Maximum Value*/
if((strlen((const char*)setEntryReq->list.tel.number) > 21) && (setEntryReq->list.storage == MMI_SIM)) {
setEntryRsp->result.flag = 1;
setEntryRsp->result.cause = 2561;
return (void *)setEntryRsp;
}
/*If Phone Number Save Request is for FDN*/
if(setEntryReq->type == MMI_PHB_FDN)
{
if (setEntryReq->list.record_index==65535)
{
if (setEntryReq->list.storage==1)
{
if (gTotalFDNEntries==0)
{
memcpy((void *)&FDNEntries[gTotalFDNEntries], (void *)&setEntryReq->list, sizeof(setEntryReq->list));
FDNEntries[gTotalFDNEntries].index = 1;
FDNEntries[gTotalFDNEntries].record_index = 1;
memcpy((void *)setEntryRsp->list, (void *)&FDNEntries[gTotalFDNEntries], sizeof(setEntryRsp->list[0]));
}
else if (setEntryReq->list.index == 65535 && gTotalFDNEntries> 0)
{
memcpy((void *)&FDNEntries[gTotalFDNEntries], (void *)&setEntryReq->list, sizeof(setEntryReq->list));
FDNEntries[gTotalFDNEntries].index = FDNEntries[gTotalFDNEntries - 1].index + 1;
FDNEntries[gTotalFDNEntries].record_index = FDNEntries[gTotalFDNEntries - 1].record_index + 1;
memcpy((void *)setEntryRsp->list, (void *)&FDNEntries[gTotalFDNEntries], sizeof(setEntryRsp->list[0]));
}
gTotalFDNEntries++;
WriteToFile(MMI_PHB_FDN);
}
}
else
{
if (setEntryReq->list.storage==1)
{
i=setEntryReq->list.index;
i--;
memcpy((void *)&FDNEntries[i], (void *)&setEntryReq->list, sizeof(setEntryReq->list));
memcpy((void *)setEntryRsp->list, (void *)&FDNEntries[i], sizeof(setEntryRsp->list[0]));
WriteToFile(MMI_PHB_FDN);
}
}
}
/*If Phone Number Save Request Is For MSISDN*/
else if(setEntryReq->type == MMI_PHB_MSISDN) {
for (U16 i = 0; i < gTotalPbookEntry; i++) {
if (setEntryReq->list.index == phbEntries[i].index)
break;
}
strcpy((S8 *)phbEntries[i].alpha_id.name, (S8 *)setEntryReq->list.alpha_id.name);
phbEntries[i].alpha_id.name_length = setEntryReq->list.alpha_id.name_length;
strcpy((S8 *)phbEntries[i].tel.number, (S8 *)setEntryReq->list.tel.number);
phbEntries[i].tel.length = setEntryReq->list.tel.length;
WriteToFile(4);
}
/*If Entry Save Request is for Phone Book*/
else if(setEntryReq->type == MMI_PHB_PHONEBOOK) {
if (setEntryReq->list.record_index == 65535) {
/*If Request Storage Type Is SIM*/
if (setEntryReq->list.storage == MMI_SIM) {
/*If Sim Entries Reaches To Its Maximum Value*/
if(gTotalPbookEntrySim == MAX_PB_ENTRIES_SIM) {
setEntryRsp->result.flag = 1;
setEntryRsp->result.cause = MMI_PHB_CAUSE_CAPACITY_EXCEEDED;
return (void *)setEntryRsp;
}
/*If First Entry Intilize the Index And Record Index*/
if (gTotalPbookEntrySim==0) {
memcpy((void *)&phbEntriesSim[gTotalPbookEntrySim], (void *)&setEntryReq->list, sizeof(setEntryReq->list));
phbEntriesSim[gTotalPbookEntrySim].index = 1;
phbEntriesSim[gTotalPbookEntrySim].record_index = 1;
memcpy((void *)setEntryRsp->list, (void *)&phbEntriesSim[gTotalPbookEntrySim], sizeof(setEntryRsp->list[0]));
}
/*Increment The Index And Record Index*/
else if (setEntryReq->list.index == 65535 && gTotalPbookEntrySim> 0) {
memcpy((void *)&phbEntriesSim[gTotalPbookEntrySim], (void *)&setEntryReq->list, sizeof(setEntryReq->list));
phbEntriesSim[gTotalPbookEntrySim].index = phbEntriesSim[gTotalPbookEntrySim - 1].index + 1;
phbEntriesSim[gTotalPbookEntrySim].record_index = phbEntriesSim[gTotalPbookEntrySim - 1].record_index + 1;
memcpy((void *)setEntryRsp->list, (void *)&phbEntriesSim[gTotalPbookEntrySim], sizeof(setEntryRsp->list[0]));
}
gTotalPbookEntrySim++;
/*Write The Phone Book Data Base to File for SIM*/
WriteToFile(MMI_SIM);
}
/*If Request Storage Type Is Phone*/
if (setEntryReq->list.storage == MMI_NVRAM) {
/*If Phone Entries Reaches To Its Maximum Value*/
if(gTotalPbookEntryPhone == MAX_PB_ENTRIES_PHONE) {
setEntryRsp->result.flag = 1;
setEntryRsp->result.cause = MMI_PHB_CAUSE_CAPACITY_EXCEEDED;
return (void *)setEntryRsp;
}
/*If First Entry Intilize the Index And Record Index*/
if (gTotalPbookEntryPhone==0) {
memcpy((void *)&phbEntriesPhone[gTotalPbookEntryPhone], (void *)&setEntryReq->list, sizeof(setEntryReq->list));
phbEntriesPhone[gTotalPbookEntryPhone].index = 1;
phbEntriesPhone[gTotalPbookEntryPhone].record_index = 1;
memcpy((void *)setEntryRsp->list, (void *)&phbEntriesPhone[gTotalPbookEntryPhone], sizeof(setEntryRsp->list[0]));
}
/*Increment The Index And Record Index*/
else if (setEntryReq->list.index == 65535 && gTotalPbookEntryPhone> 0) {
memcpy((void *)&phbEntriesPhone[gTotalPbookEntryPhone], (void *)&setEntryReq->list, sizeof(setEntryReq->list));
phbEntriesPhone[gTotalPbookEntryPhone].index = phbEntriesPhone[gTotalPbookEntryPhone - 1].index + 1;
phbEntriesPhone[gTotalPbookEntryPhone].record_index = phbEntriesPhone[gTotalPbookEntryPhone - 1].record_index + 1;
memcpy((void *)setEntryRsp->list, (void *)&phbEntriesPhone[gTotalPbookEntryPhone], sizeof(setEntryRsp->list[0]));
}
gTotalPbookEntryPhone++;
/*Write The Phone Book Data Base to File for Phone*/
WriteToFile(MMI_NVRAM);
}
}
else {
/*If new entry is for SIM*/
if (setEntryReq->list.storage == MMI_SIM) {
i=setEntryReq->list.record_index;
i--;
memcpy((void *)&phbEntriesSim[i], (void *)&setEntryReq->list, sizeof(setEntryReq->list));
memcpy((void *)setEntryRsp->list, (void *)&phbEntriesSim[i], sizeof(setEntryRsp->list[0]));
WriteToFile(MMI_SIM);
}
/*If new entry is for phone*/
if (setEntryReq->list.storage == MMI_NVRAM) {
i=setEntryReq->list.record_index;
i--;
memcpy((void *)&phbEntriesPhone[i], (void *)&setEntryReq->list, sizeof(setEntryReq->list));
memcpy((void *)setEntryRsp->list, (void *)&phbEntriesPhone[i], sizeof(setEntryRsp->list[0]));
WriteToFile(MMI_NVRAM);
}
}
}
return (void *)setEntryRsp;
}
/*****************************************************************************
* FUNCTION
* HandleSearchEntryRequest
* DESCRIPTION
* This API search the phone book data base for a specific search expression.
* PARAMETERS
* void
* RETURNS
* void * - MSG_PHB_GET_ENTRY_BY_NAME_RSP_STRUCT structure holds the entry
* corresponding
*****************************************************************************/
void *HandleSearchEntryRequest() {
/*Cast The Incoming Message to Name Req Structure*/
MSG_PHB_GET_ENTRY_BY_NAME_REQ_STRUCT *searchEntryReq = (MSG_PHB_GET_ENTRY_BY_NAME_REQ_STRUCT*)gBuffer;
S8 searchName[30];
U16 i, searchCount;
strcpy(searchName, (S8 *)searchEntryReq->name.name);
searchEntryRsp = (MSG_PHB_GET_ENTRY_BY_NAME_RSP_STRUCT *)CMemAllocator::MyMallocDataPtr(sizeof(MSG_PHB_GET_ENTRY_BY_NAME_RSP_STRUCT));
memset( searchEntryRsp, '\0', sizeof(MSG_PHB_GET_ENTRY_BY_NAME_RSP_STRUCT) );
/*Search The Sub Name In Phone Book Database For Sim*/
for (i = 0, searchCount = 0; i < gTotalPbookEntrySim; i++) {
if (strstr((S8 *)phbEntriesSim[i].alpha_id.name, searchName)) {
searchEntryRsp->list[searchCount] = phbEntriesSim[i];
/*Increment The Count On Search Sucess*/
searchCount++;
}
}
/*Search The Sub Name In Phone Book Database For Phone*/
for (i = 0; i < gTotalPbookEntryPhone; i++) {
if (strstr((S8 *)phbEntriesPhone[i].alpha_id.name, searchName)) {
searchEntryRsp->list[searchCount] = phbEntriesPhone[i];
/*Increment The Count On Search Sucess*/
searchCount++;
}
}
/*If search is sucessfull fill the return structure*/
if (searchCount) {
searchEntryRsp->no_list = searchCount;
searchEntryRsp->result.flag = 0;
searchEntryRsp->result.cause = 0;
S8 str[20];
sprintf(str, "%d entries found", searchCount);
}
/*Else fill the return structure with Error Value*/
else {
searchEntryRsp->result.flag = 1;
searchEntryRsp->result.cause =1;
}
return (void *)searchEntryRsp;
}
/*****************************************************************************
* FUNCTION
* HandleDeleteEntryRequest
* DESCRIPTION
* This API Delete The PhoneBook Entry Depending Upon The Index/Record Index
* Value.
* PARAMETERS
* void
* RETURNS
* void * - MSG_PHB_DELETE_ENTRY_RSP_STRUCT structure pointer hold delete
* request response for MMI.
*****************************************************************************/
void *HandleDeleteEntryRequest() {
U16 i,j;
MSG_PHB_DELETE_ENTRY_REQ_STRUCT* deleteEntryReq = (MSG_PHB_DELETE_ENTRY_REQ_STRUCT*)gBuffer;
MSG_PHB_DELETE_ENTRY_RSP_STRUCT* deleteEntryRsp = NULL;
/* If the request is for the FDN number */
if(deleteEntryReq->type == MMI_PHB_FDN) {
for (i = 0; i < gTotalFDNEntries; i++) {
if (FDNEntries[i].index == deleteEntryReq->index)
break;
}
for (j = i; j < gTotalFDNEntries - 1; j++) FDNEntries[j] = FDNEntries[j+1];
/*Reduce The Number Of Entries*/
gTotalFDNEntries--;
/*Write The Update Data To File*/
WriteToFile(MMI_PHB_FDN);
}
/*If Delete Request Is For The Phone Book*/
else {
/*If Request is not for delete all*/
if (deleteEntryReq->del_all == 0) {
/*If Storage is for Sim*/
if (deleteEntryReq->storage==1) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -