Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #70, ОКТЯБРЬ 2004 г.

Возьми ОпСоСа под контроль!

Мингулов Денис

Хакер, номер #070, стр. 070-126-2


CLogClient* logClient;

CLogFilterList* filterList;

CLogFilter* filter;

В реализации класса используй стандартное наследование от CActive. Примеры можешь посмотреть здесь (для Series 60 SDK 2.1): \Symbian\7.0s\Series60_v21\Examples\base\ipc\async.

В ConstructL() подцепляемся к серверу логов:

iFs.Connect();

iLogClient = CLogClient::NewL(iFs);

iLogViewEvent = CLogViewEvent::NewL(*iLogClient);

filter = CLogFilter::NewL();

Для звонков используй такой фильтр, для (HS)CSD используй KLogDataEventTypeUid, факсов - KLogFaxEventTypeUid, SMS - KLogShortMessageEventTypeUid, GPRS - KLogPacketDataEventTypeUid.

filter-> SetEventType( KLogCallEventTypeUid );

logViewEvent-> SetFilterL(*filter, status);

В DoCancel не забудь прекратить все открытые запросы: iRecentLogView-> Cancel();

В RunL при отсутствии ошибок (iStatus == KErrNone) реализуй запрос (пример запроса последнего номера):

TBuf<256> iTelNumber;

const CLogEvent& event = iRecentLogView-> Event();

iTelNumber.Copy(event.Number());

А вот сама функция GetLastes:

// прерываем старый запрос

iRecentLogView-> Cancel();

// делаем запрос

if (iRecentLogView-> SetRecentListL(KLogNullRecentList,iStatus)) SetActive();

Запрос произвольного номера делается аналогично.

Обработай!

Лучше все данные по тарифам и дополнительным услугам брать из собственных файлов, чтобы не требовалось переделывать программу после каких-нибудь изменений. В своих же файлах лучше хранить полученные сведения о входящих и исходящих звонках и SMS.

Для работы с файлами нужно подключить заголовочный файл <f32file.h> и подсоединить к проекту библиотеку efsrv.lib. Вначале подсоединись к файл-серверу (создай сессию) - RFs::Connect(). Затем используй RFile - Open, Close, Read, Write, Seek.

Пример работы с файлами

RFs fsSession;

User::LeaveIfError(fsSession.Connect());

RFile file;

User::LeaveIfError(file.Open(fsSession,strFileName,EFileRead|EFileShareAny));

TBuf8<512> buf;

file.Seek(ESeekCurrent,0);

User::LeaveIfError(buf,512);

file.Close();

fsSession.Close();

Сколько потратили?

Итак, после обработки логов ты имеешь все данные за определенный период. Теперь хотелось бы узнать, сколько было потрачено денег.

Звонки делятся на входящие, исходящие и пропущенные, которые можно не учитывать. О каждом звонке необходимо выяснить, откуда или куда он был, как его учитывать и во сколько в итоге он обойдется.

Обычно звонки с местных сотовых бесплатны. Узнать принадлежность телефонного номера какому-нибудь региону в негеографических зонах (таких, как +7-9EF) можно на сайте www.mtt.ru/info (справа в справочной информации). Там же можно найти международные и междугородные коды. А вот «городские» телефонные номера, принадлежащие оператору сотовой связи, придется искать самому.

Учитывай возможность сокращенного набора номера - 8 вместо +7, 8-2 для выхода в область, отсутствие кода страны и города, бесплатные номера вроде 112 и 01.

Звонок может тарифицироваться поминутно, посекундно, посекундно со второй минуты, каждые 10 секунд и как угодно еще. Кроме того, наша программа должна учитывать возможность наличия платы за соединение.

Назад на стр. 070-126-1  Содержание  Вперед на стр. 070-126-3