/*

MAgen.dll: Miranda plugin for mail.ru message exchange.

Copyright 2005-2010 Lenik.
Project home at http://www.lenik.ru/win32/magent
Author contact: lenik@lenik.ru

This program is free software.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

*/

int MRIM_RequestAuthorization(WPARAM wParam, LPARAM lParam)
{
//    * Пакет: Авторизация пользователя на добавление в контакт-лист
//
//      Имя пакета: MRIM_CS_AUTHORIZE
//      Тип пакета: cs
//      Параметры:
//
//      LPS ## user ## email пользователя
//
//      Описание: Отправляется, чтобы разрешить user добавление пользователя в контакт-лист и наблюдение за его статусом.
DBVARIANT dbv;
DBCONTACTGETSETTING cgs;
unsigned long number;

//MessageBox(NULL,"MRIM_RequestAuthorization() called","Info",MB_OK|MB_ICONINFORMATION);
if(wParam != 0)
    {
    cgs.szModule = DB_SETTING_CLIST;
    cgs.szSetting = DB_SETTING_CLIST_MYHANDLE;
    cgs.pValue = &dbv;
    if(CallService(MS_DB_CONTACT_GETSETTING,wParam,(LPARAM)&cgs) == 0)
        {
        if(MRIM_do_list_add(dbv.pszVal,&number) == 0)
            {
            DBWriteContactSettingDword((HANDLE)wParam,ProtoName,DB_SETTING_NUMBER,number);
            }
        MRIM_do_authorize(dbv.pszVal);
        DBFreeVariant(&dbv);
        }
    }
return(0);
}

int MRIM_AuthAllow(WPARAM wParam,LPARAM lParam)
{
int retval = 1;
DBEVENTINFO dbei;

//MessageBox(NULL,"MRIM_AuthAllow() called.","Info",MB_OK);
memset(&dbei,0,sizeof(dbei));
dbei.cbSize = sizeof(dbei);
if((dbei.cbBlob = CallService(MS_DB_EVENT_GETBLOBSIZE,wParam,0)) != -1)
    {
    if((dbei.pBlob = (PBYTE)malloc(dbei.cbBlob)) != NULL)
        {
        if(CallService(MS_DB_EVENT_GET,wParam,(LPARAM)&dbei) == 0)
            {
            if((dbei.eventType == EVENTTYPE_AUTHREQUEST)&&(strcmp(dbei.szModule,ProtoName) == 0))
                {
                HANDLE hContact = *((HANDLE*)(dbei.pBlob+sizeof(DWORD)));
                //char* nick = (char*)(dbei.pBlob+sizeof(DWORD)*2);
                //char* firstName = nick + strlen(nick) + 1;
                //char* lastName = firstName + strlen( firstName ) + 1;
                //char* email = lastName + strlen( lastName ) + 1;

                DBWriteContactSettingByte(hContact,DB_SETTING_CLIST,"NotOnList",0);
                MRIM_RequestAuthorization((WPARAM)hContact,(LPARAM)0);
                retval = 0;
                }
            }
        free(dbei.pBlob);
        }
    }
return(retval);
}

int MRIM_AuthDeny(WPARAM wParam,LPARAM lParam)
{
int retval = 1;
DBEVENTINFO dbei;

//MessageBox(NULL,"MRIM_AuthDeny() called.","Info",MB_OK);
memset(&dbei,0,sizeof(dbei));
dbei.cbSize = sizeof(dbei);
if((dbei.cbBlob = CallService(MS_DB_EVENT_GETBLOBSIZE,wParam,0)) != -1)
    {
    if((dbei.pBlob = (PBYTE)malloc(dbei.cbBlob)) != NULL)
        {
        if(CallService(MS_DB_EVENT_GET,wParam,(LPARAM)&dbei) == 0)
            {
            if((dbei.eventType == EVENTTYPE_AUTHREQUEST)&&(strcmp(dbei.szModule,ProtoName) == 0))
                {
                HANDLE hContact = *((HANDLE*)(dbei.pBlob+sizeof(DWORD)));

                DBWriteContactSettingByte(hContact,DB_SETTING_CLIST,"NotOnList",1);
                retval = 0;
                }
            }
        free(dbei.pBlob);
        }
    }
return(retval);
}
