/*

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.

*/

//packet construction
void MRIM_Packet_AddString(void *packet,unsigned char *string)
{
mrim_packet_header_t *p = (mrim_packet_header_t*)packet;
unsigned long *lptr;
unsigned char *cptr;

lptr = (unsigned long*)(((unsigned char*)packet) + sizeof(mrim_packet_header_t) + p->dlen);
cptr = ((unsigned char*)lptr) + 4;
*lptr = 0;
p->dlen += 4;
while(string[0] != 0)
    {
    cptr[0] = string[0];
    cptr++;
    (*lptr)++;
    p->dlen++;
    string++;
    }
}

void MRIM_Packet_AddLong(void *packet,unsigned long val)
{
mrim_packet_header_t *p = (mrim_packet_header_t*)packet;
unsigned long *lptr;

lptr = (unsigned long*)(((unsigned char*)packet) + sizeof(mrim_packet_header_t) + p->dlen);
*lptr = val;
p->dlen += 4;
}

unsigned long MRIM_Packet_GetString(unsigned long *pos,void *packet,unsigned char *string)
{
unsigned long *lptr;
unsigned char *cptr;
unsigned long t;

if((*pos) >= ((mrim_packet_header_t*)packet)->dlen)return(1);
lptr = (unsigned long*)(((unsigned char*)packet) + sizeof(mrim_packet_header_t) + (*pos));
cptr = ((unsigned char*)lptr) + 4;
(*pos) += 4;
for(t=0;t<(*lptr);t++)
    {
    string[t] = cptr[t];
    (*pos)++;
    }
string[t] = 0;
return(0);
}

unsigned long MRIM_Packet_GetLong(unsigned long *pos,void *packet,unsigned long *val)
{
unsigned long *lptr;

if((*pos) >= ((mrim_packet_header_t*)packet)->dlen)return(1);
lptr = (unsigned long*)(((unsigned char*)packet) + sizeof(mrim_packet_header_t) + (*pos));
(*pos) += 4;
(*val) = (*lptr);
return(0);
}

unsigned long MRIM_sendpacket(void *buffer)
{
unsigned long size;
mrim_packet_header_t *p = (mrim_packet_header_t*)buffer;

if(MRIM_hServerConn != NULL)
    {
    size = sizeof(mrim_packet_header_t) + p->dlen;
    if(Netlib_Send(MRIM_hServerConn,(const char *)buffer,size,0) != size)
        {
    //    MessageBox(NULL,"Send() error","Error",MB_OK);
        }
    else{
    //    MessageBox(NULL,"Ok","Ok",MB_OK);
        }
    }
//if(send(MRIM_Socket,buffer,sizeof(mrim_packet_header_t) + p->dlen,0) == sizeof(mrim_packet_header_t) + p->dlen)
//    return(0);
return(0);
}
