forked from KolibriOS/kolibrios
fix unrecognized symbols while base64 decode, small optimizations
git-svn-id: svn://kolibrios.org@4186 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
dbaea2b077
commit
5f5f29ec11
@ -45,9 +45,9 @@ enum {
|
|||||||
#define WIN_H 440
|
#define WIN_H 440
|
||||||
#define WIN_MIN_W 500
|
#define WIN_MIN_W 500
|
||||||
#define WIN_MIN_H 380
|
#define WIN_MIN_H 380
|
||||||
#define LOGIN_HEADER "Login - Email client Liza 0.9.2"
|
#define LOGIN_HEADER "Login - Email client Liza 0.9.3"
|
||||||
#define OPTIONS_HEADER "Options - Email client Liza 0.9.2"
|
#define OPTIONS_HEADER "Options - Email client Liza 0.9.3"
|
||||||
#define MAILBOX_HEADER "Mail Box - Email client Liza 0.9.2"
|
#define MAILBOX_HEADER "Mail Box - Email client Liza 0.9.3"
|
||||||
#define BUFFERSIZE 512
|
#define BUFFERSIZE 512
|
||||||
proc_info Form;
|
proc_info Form;
|
||||||
system_colors sc;
|
system_colors sc;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
//Leency & SoUrcerer, LGPL
|
//Leency & SoUrcerer, LGPL
|
||||||
|
//Hidnplayer
|
||||||
|
|
||||||
#define LIST_INFO_H 59
|
#define LIST_INFO_H 59
|
||||||
int status_bar_h = 15;
|
int status_bar_h = 15;
|
||||||
@ -33,7 +34,7 @@ void MailBoxNetworkProcess()
|
|||||||
if (aim) switch(aim)
|
if (aim) switch(aim)
|
||||||
{
|
{
|
||||||
case SEND_NSTAT:
|
case SEND_NSTAT:
|
||||||
SetLoginStatus("Counting mail, awaiting answer...");
|
SetMailBoxStatus(NULL, "Counting mail, awaiting answer...");
|
||||||
request_len = GetRequest("STAT", NULL);
|
request_len = GetRequest("STAT", NULL);
|
||||||
Send(socketnum, #request, request_len, 0);
|
Send(socketnum, #request, request_len, 0);
|
||||||
if (EAX == 0xffffffff) { debug("Error sending STAT. Retry..."w); break;}
|
if (EAX == 0xffffffff) { debug("Error sending STAT. Retry..."w); break;}
|
||||||
@ -81,7 +82,7 @@ void MailBoxNetworkProcess()
|
|||||||
if (strncmp(listpointer-5,"\n.\n",5)==0) // note that c-- assembles "\n.\n" to 0x0d, 0x0a, 0x2e, 0x0d, 0x0a
|
if (strncmp(listpointer-5,"\n.\n",5)==0) // note that c-- assembles "\n.\n" to 0x0d, 0x0a, 0x2e, 0x0d, 0x0a
|
||||||
{
|
{
|
||||||
aim = SEND_RETR;
|
aim = SEND_RETR;
|
||||||
debug("Got mail list");
|
debug("goto SEND_RETR");
|
||||||
DrawMailBox();
|
DrawMailBox();
|
||||||
|
|
||||||
*listpointer='\0';
|
*listpointer='\0';
|
||||||
@ -94,7 +95,6 @@ void MailBoxNetworkProcess()
|
|||||||
from = to = date = subj = cur_charset = NULL;
|
from = to = date = subj = cur_charset = NULL;
|
||||||
letter_view.ClearList();
|
letter_view.ClearList();
|
||||||
DrawMailBox();
|
DrawMailBox();
|
||||||
debug("Send RETR, awaiting answer...");
|
|
||||||
request_len = GetRequest("RETR", itoa(mail_list.current+1));
|
request_len = GetRequest("RETR", itoa(mail_list.current+1));
|
||||||
if (Send(socketnum, #request, request_len, 0) == 0xffffffff)
|
if (Send(socketnum, #request, request_len, 0) == 0xffffffff)
|
||||||
{
|
{
|
||||||
@ -103,7 +103,8 @@ void MailBoxNetworkProcess()
|
|||||||
}
|
}
|
||||||
mailsize = atr.GetSize(mail_list.current+1) + 1024;
|
mailsize = atr.GetSize(mail_list.current+1) + 1024;
|
||||||
free(mailstart);
|
free(mailstart);
|
||||||
if (!mailstart = malloc(mailsize))
|
mailstart = malloc(mailsize);
|
||||||
|
if (!mailstart)
|
||||||
{
|
{
|
||||||
debug("alloc error!");
|
debug("alloc error!");
|
||||||
aim=NULL;
|
aim=NULL;
|
||||||
@ -111,15 +112,13 @@ void MailBoxNetworkProcess()
|
|||||||
}
|
}
|
||||||
mailend = mailstart;
|
mailend = mailstart;
|
||||||
aim = GET_ANSWER_RETR;
|
aim = GET_ANSWER_RETR;
|
||||||
|
debug("goto GET_ANSWER_RETR");
|
||||||
|
break;
|
||||||
|
|
||||||
case GET_ANSWER_RETR:
|
case GET_ANSWER_RETR:
|
||||||
ticks = Receive(socketnum, mailend, mailsize + mailstart - mailend, MSG_DONTWAIT);
|
ticks = Receive(socketnum, mailend, mailsize + mailstart - mailend, MSG_DONTWAIT);
|
||||||
if (ticks == 0xffffffff) break;
|
if (ticks == 0xffffffff) break;
|
||||||
|
mailend += ticks;
|
||||||
mailend = mailend + ticks;
|
|
||||||
|
|
||||||
if (!aim) break;
|
|
||||||
|
|
||||||
if (mailsize + mailstart - mailend - 2 < 0)
|
if (mailsize + mailstart - mailend - 2 < 0)
|
||||||
{
|
{
|
||||||
debug("Resizing buffer");
|
debug("Resizing buffer");
|
||||||
@ -127,7 +126,6 @@ void MailBoxNetworkProcess()
|
|||||||
mailstart = realloc(mailstart, mailsize);
|
mailstart = realloc(mailstart, mailsize);
|
||||||
if (!mailstart) { StopConnect("Realloc error!"); break;}
|
if (!mailstart) { StopConnect("Realloc error!"); break;}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mailsize>9000)
|
if (mailsize>9000)
|
||||||
{
|
{
|
||||||
load_persent = mailend - mailstart * 100 ;
|
load_persent = mailend - mailstart * 100 ;
|
||||||
@ -143,7 +141,7 @@ void MailBoxLoop()
|
|||||||
{
|
{
|
||||||
int key, id;
|
int key, id;
|
||||||
mouse m;
|
mouse m;
|
||||||
int panels_drag = 0;
|
int panels_drag=0, clicked_list=0;
|
||||||
dword line_col, text_col;
|
dword line_col, text_col;
|
||||||
|
|
||||||
mail_list.h = Form.cheight/4;
|
mail_list.h = Form.cheight/4;
|
||||||
@ -198,8 +196,14 @@ void MailBoxLoop()
|
|||||||
{
|
{
|
||||||
if (letter_view.MouseScroll(m.vert)) DrawLetter();
|
if (letter_view.MouseScroll(m.vert)) DrawLetter();
|
||||||
}
|
}
|
||||||
//if (!m.lkm) && (menu.ProcessMouse(mm.x, mm.y)) &&
|
if (m.lkm) && (mail_list.MouseOver(m.x, m.y)) && (!clicked_list) clicked_list=1;
|
||||||
//if (!m.lkm) && if (menu.ProcessMouse(mm.x, mm.y)) DrawMenuList();
|
if (!m.lkm) && (clicked_list) if (mail_list.ProcessMouse(m.x, m.y))
|
||||||
|
{
|
||||||
|
clicked_list = 0;
|
||||||
|
if (aim) break;
|
||||||
|
DrawMailList();
|
||||||
|
aim = SEND_RETR;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case evButton:
|
case evButton:
|
||||||
@ -241,14 +245,6 @@ void MailBoxLoop()
|
|||||||
}
|
}
|
||||||
if (id==CLOSE_CHANGE_CHARSET) goto _MB_DRAW;
|
if (id==CLOSE_CHANGE_CHARSET) goto _MB_DRAW;
|
||||||
|
|
||||||
if (id>=30)
|
|
||||||
{
|
|
||||||
if (aim) break;
|
|
||||||
mail_list.current = mail_list.first + id - 30;
|
|
||||||
DrawMailList();
|
|
||||||
aim = SEND_RETR;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case evKey:
|
case evKey:
|
||||||
key = GetKey();
|
key = GetKey();
|
||||||
@ -321,7 +317,6 @@ void DrawMailList()
|
|||||||
PutPaletteImage(sizeof(letter_icons)/3*direction + #letter_icons, 18,12, on_x+18,
|
PutPaletteImage(sizeof(letter_icons)/3*direction + #letter_icons, 18,12, on_x+18,
|
||||||
mail_list.line_h-12/2+ on_y, 8, #letter_icons_pal);
|
mail_list.line_h-12/2+ on_y, 8, #letter_icons_pal);
|
||||||
WriteText(on_x + 42, on_y+5, 0x80, 0, atr.GetSubject(i+mail_list.first+1));
|
WriteText(on_x + 42, on_y+5, 0x80, 0, atr.GetSubject(i+mail_list.first+1));
|
||||||
DefineButton(0, on_y, mail_list.w-1, mail_list.line_h, 30+i+BT_HIDE+BT_NOFRAME);
|
|
||||||
DrawBar(0, on_y + mail_list.line_h-1, mail_list.w, 1, 0xCCCccc);
|
DrawBar(0, on_y + mail_list.line_h-1, mail_list.w, 1, 0xCCCccc);
|
||||||
WriteText(10, on_y+5, 0x80, 0, itoa(i+mail_list.first+1));
|
WriteText(10, on_y+5, 0x80, 0, itoa(i+mail_list.first+1));
|
||||||
WriteText(mail_list.w - 40, on_y+5, 0x80, 0, ConvertMemSize(atr.GetSize(i+mail_list.first+1)));
|
WriteText(mail_list.w - 40, on_y+5, 0x80, 0, ConvertMemSize(atr.GetSize(i+mail_list.first+1)));
|
||||||
@ -347,8 +342,8 @@ void DrawLetterInfo()
|
|||||||
WriteText (45, lt_y+20, 0x80, sc.work_text, #to);
|
WriteText (45, lt_y+20, 0x80, sc.work_text, #to);
|
||||||
WriteTextB(10, lt_y+32, 0x80, sc.work_text, "Date:");
|
WriteTextB(10, lt_y+32, 0x80, sc.work_text, "Date:");
|
||||||
WriteText (45, lt_y+32, 0x80, sc.work_text, #date);
|
WriteText (45, lt_y+32, 0x80, sc.work_text, #date);
|
||||||
WriteTextB(10, lt_y+44, 0x80, sc.work_text, "Subject:");
|
WriteTextB(10, lt_y+44, 0x80, sc.work_text, "Subj:");
|
||||||
WriteText (66, lt_y+44, 0x80, sc.work_text, #subj);
|
WriteText (45, lt_y+44, 0x80, sc.work_text, #subj);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrawLetter()
|
void DrawLetter()
|
||||||
@ -364,7 +359,7 @@ void DrawLetter()
|
|||||||
{
|
{
|
||||||
for ( ; i < letter_view.first; i++) cur_line = GetNextLine(cur_line);
|
for ( ; i < letter_view.first; i++) cur_line = GetNextLine(cur_line);
|
||||||
|
|
||||||
for (i=0; i < letter_view.h / letter_view.line_h; i++)
|
for (i=0; i < letter_view.visible; i++)
|
||||||
{
|
{
|
||||||
next_line = GetNextLine(cur_line);
|
next_line = GetNextLine(cur_line);
|
||||||
line_text = CopyBetweenOffsets(cur_line, next_line);
|
line_text = CopyBetweenOffsets(cur_line, next_line);
|
||||||
|
@ -5,9 +5,10 @@ void ParseMail()
|
|||||||
dword line_off, new_buf;
|
dword line_off, new_buf;
|
||||||
char tline[256];
|
char tline[256];
|
||||||
|
|
||||||
if ( mailend-mailstart > 9) if (strncmp(mailend-5,"\n.\n",5)==0) // note that c-- assembles "\n.\n" to 0x0d, 0x0a, 0x2e, 0x0d, 0x0a
|
if ( mailend-mailstart > 9) && (strncmp(mailend-5,"\n.\n",5)==0) // note that c-- assembles "\n.\n" to 0x0d, 0x0a, 0x2e, 0x0d, 0x0a
|
||||||
{
|
{
|
||||||
mailend -= 5;
|
mailend -= 5;
|
||||||
|
DSBYTE[mailend] = '\0';
|
||||||
if (strstr(mailstart, "+OK")!=mailstart)
|
if (strstr(mailstart, "+OK")!=mailstart)
|
||||||
{
|
{
|
||||||
aim = GET_ANSWER_RETR;
|
aim = GET_ANSWER_RETR;
|
||||||
@ -16,13 +17,13 @@ void ParseMail()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
aim=NULL;
|
aim=NULL;
|
||||||
DSBYTE[mailend] = '\0';
|
|
||||||
mailsize = mailend - mailstart;
|
mailsize = mailend - mailstart;
|
||||||
|
|
||||||
|
debug("Getting QP");
|
||||||
if (strstri(mailstart, "quoted-printable")!=0)
|
if (strstri(mailstart, "quoted-printable")!=0)
|
||||||
{
|
{
|
||||||
new_buf = malloc(mailend-mailstart);
|
new_buf = malloc(mailsize);
|
||||||
qp_decode stdcall (mailstart, new_buf, mailend-mailstart);
|
qp_decode stdcall (mailstart, new_buf, mailsize);
|
||||||
if (EAX==-1) debug("Too small buffer to convert QUOTED-PRINTABLE");
|
if (EAX==-1) debug("Too small buffer to convert QUOTED-PRINTABLE");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -32,12 +33,16 @@ void ParseMail()
|
|||||||
mailend = mailsize + mailstart;
|
mailend = mailsize + mailstart;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
debug("GetHeaders: From, To, Date, Subject");
|
||||||
GetHeader(#from, "\nFrom:");
|
GetHeader(#from, "\nFrom:");
|
||||||
GetHeader(#to, "\nTo:");
|
GetHeader(#to, "\nTo:");
|
||||||
GetHeader(#date, "\nDate:");
|
GetHeader(#date, "\nDate:");
|
||||||
GetHeader(#subj, "\nSubject:");
|
GetHeader(#subj, "\nSubject:");
|
||||||
mdata = strstr(mailstart, "\n\r") + 3; // 0x0d 0x0a, 0x0a
|
debug("Get mdata");
|
||||||
|
mdata = strstr(mailstart, "\x0a\x0d") + 3; // 0x0d 0x0a, 0x0a
|
||||||
|
debug("ConvertToDOS");
|
||||||
ConvertToDOS(mdata, mailstart);
|
ConvertToDOS(mdata, mailstart);
|
||||||
|
debug("FromHTMLtoTXT");
|
||||||
FromHTMLtoTXT();
|
FromHTMLtoTXT();
|
||||||
letter_view.first = letter_view.count = 0;
|
letter_view.first = letter_view.count = 0;
|
||||||
|
|
||||||
@ -47,6 +52,7 @@ void ParseMail()
|
|||||||
line_off = GetNextLine(line_off);
|
line_off = GetNextLine(line_off);
|
||||||
letter_view.count++;
|
letter_view.count++;
|
||||||
}
|
}
|
||||||
|
debug("SetAtrFromCurr");
|
||||||
atr.SetAtrFromCurr(mail_list.current+1);
|
atr.SetAtrFromCurr(mail_list.current+1);
|
||||||
DrawMailBox();
|
DrawMailBox();
|
||||||
}
|
}
|
||||||
@ -83,7 +89,7 @@ void FromHTMLtoTXT()
|
|||||||
dword cur_chr, txt_buf_srt, txt_buf_end, is_tag=0;
|
dword cur_chr, txt_buf_srt, txt_buf_end, is_tag=0;
|
||||||
int i;
|
int i;
|
||||||
if (strstri(mdata, "<html>")==0) && (strstri(mailstart, "text/html")==0) {debug("no html tags found"); return;}
|
if (strstri(mdata, "<html>")==0) && (strstri(mailstart, "text/html")==0) {debug("no html tags found"); return;}
|
||||||
debug ("converting: html -> txt");
|
debug ("Mail got <html> code");
|
||||||
cur_chr = mdata;
|
cur_chr = mdata;
|
||||||
txt_buf_srt = malloc(mailend - mailstart);
|
txt_buf_srt = malloc(mailend - mailstart);
|
||||||
txt_buf_end = txt_buf_srt;
|
txt_buf_end = txt_buf_srt;
|
||||||
@ -137,13 +143,20 @@ dword CopyBetweenOffsets(dword start, end) //do not forget to free(line) after u
|
|||||||
return line;
|
return line;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void GetHeader(dword workstr, searchstr)
|
void GetHeader(dword workstr, searchstr)
|
||||||
{
|
{
|
||||||
char tmpbuf[512];
|
char tmpbuf[512];
|
||||||
dword Qoff;
|
dword Qoff;
|
||||||
|
int q_start, b_start;
|
||||||
|
|
||||||
strcpyb(mailstart, workstr, searchstr, "\n");
|
strcpyb(mailstart, workstr, searchstr, "\n");
|
||||||
if (strstri(workstr, "?Q?"))
|
debug(searchstr);
|
||||||
|
debug(workstr);
|
||||||
|
if (strlen(workstr)<8) return;
|
||||||
|
q_start = strstri(workstr, "?Q?");
|
||||||
|
b_start = strstri(workstr, "?B?");
|
||||||
|
if (q_start)
|
||||||
{
|
{
|
||||||
qp_decode stdcall (workstr, #tmpbuf, strlen(workstr));
|
qp_decode stdcall (workstr, #tmpbuf, strlen(workstr));
|
||||||
ConvertToDOS(#tmpbuf, workstr);
|
ConvertToDOS(#tmpbuf, workstr);
|
||||||
@ -151,9 +164,11 @@ void GetHeader(dword workstr, searchstr)
|
|||||||
Qoff = strstri(workstr, "?Q?");
|
Qoff = strstri(workstr, "?Q?");
|
||||||
strcpy(workstr, Qoff);
|
strcpy(workstr, Qoff);
|
||||||
}
|
}
|
||||||
if (strstr(workstr, "?B?"))
|
|
||||||
|
//any text that goes after "?=" deletes now
|
||||||
|
if (b_start)
|
||||||
{
|
{
|
||||||
base64_decode stdcall (strstri(workstr, "?B?"), #tmpbuf, strlen(workstr));
|
base64_decode stdcall (b_start, #tmpbuf, strlen(b_start)-5);
|
||||||
ConvertToDOS(#tmpbuf, workstr);
|
ConvertToDOS(#tmpbuf, workstr);
|
||||||
strcpy(workstr, #tmpbuf);
|
strcpy(workstr, #tmpbuf);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user