From 22492dbee94792ae1084ecdc84d7fe666d3f83cc Mon Sep 17 00:00:00 2001 From: ergosteur Date: Wed, 8 Apr 2026 18:29:40 -0400 Subject: [PATCH] Implement XDG compliance, logging, and improved 401 error handling - Install to ~/.local/bin/winamp-mpris - Use ~/.local/state/winamp-mpris/bridge.log for logging - Use $XDG_RUNTIME_DIR/winamp-mpris.pid for PID management - Add detailed user notification for 401 Unauthorized errors - Add install.sh for automated, standard-compliant setup - Include Winamp Web Interface source code and installer in repository --- Wawi Source/ClientConnection.cpp | 541 ++++++++++ Wawi Source/Config.cpp | 535 ++++++++++ Wawi Source/Config_users.cpp | 345 +++++++ Wawi Source/DeletePlaylistEntry.cpp | 231 +++++ Wawi Source/HTTPServer.exe | Bin 0 -> 93759 bytes Wawi Source/Images/OK.gif | Bin 0 -> 956 bytes Wawi Source/Images/Title Graphic/Wawi.jpg | Bin 0 -> 11694 bytes Wawi Source/Images/about.gif | Bin 0 -> 947 bytes Wawi Source/Images/admin.gif | Bin 0 -> 943 bytes Wawi Source/Images/black.gif | Bin 0 -> 799 bytes Wawi Source/Images/browse.gif | Bin 0 -> 940 bytes Wawi Source/Images/frames_one.bmp | Bin 0 -> 3038 bytes Wawi Source/Images/frames_one_lg.bmp | Bin 0 -> 5446 bytes Wawi Source/Images/frames_three.bmp | Bin 0 -> 3038 bytes Wawi Source/Images/frames_three_lg.bmp | Bin 0 -> 5446 bytes Wawi Source/Images/frames_two.bmp | Bin 0 -> 3038 bytes Wawi Source/Images/frames_two_lg.bmp | Bin 0 -> 5446 bytes Wawi Source/Images/list_delete.gif | Bin 0 -> 842 bytes Wawi Source/Images/list_play.gif | Bin 0 -> 843 bytes Wawi Source/Images/main.gif | Bin 0 -> 950 bytes Wawi Source/Images/next.gif | Bin 0 -> 952 bytes Wawi Source/Images/pause.gif | Bin 0 -> 953 bytes Wawi Source/Images/play.gif | Bin 0 -> 945 bytes Wawi Source/Images/playlist.gif | Bin 0 -> 936 bytes Wawi Source/Images/popup.gif | Bin 0 -> 956 bytes Wawi Source/Images/prev.gif | Bin 0 -> 951 bytes Wawi Source/Images/randomoff.gif | Bin 0 -> 948 bytes Wawi Source/Images/randomon.gif | Bin 0 -> 963 bytes Wawi Source/Images/repeatoff.gif | Bin 0 -> 946 bytes Wawi Source/Images/repeaton.gif | Bin 0 -> 963 bytes Wawi Source/Images/stop.gif | Bin 0 -> 946 bytes Wawi Source/Images/stopslow.gif | Bin 0 -> 961 bytes Wawi Source/Images/vol0.gif | Bin 0 -> 833 bytes Wawi Source/Images/vol1.gif | Bin 0 -> 843 bytes Wawi Source/Images/vol10.gif | Bin 0 -> 866 bytes Wawi Source/Images/vol2.gif | Bin 0 -> 853 bytes Wawi Source/Images/vol3.gif | Bin 0 -> 856 bytes Wawi Source/Images/vol4.gif | Bin 0 -> 845 bytes Wawi Source/Images/vol5.gif | Bin 0 -> 862 bytes Wawi Source/Images/vol6.gif | Bin 0 -> 863 bytes Wawi Source/Images/vol7.gif | Bin 0 -> 864 bytes Wawi Source/Images/vol8.gif | Bin 0 -> 845 bytes Wawi Source/Images/vol9.gif | Bin 0 -> 866 bytes Wawi Source/Images/volume-all.bmp | Bin 0 -> 13614 bytes Wawi Source/Images/wa.ico | Bin 0 -> 1078 bytes Wawi Source/Images/winamp.ico | Bin 0 -> 318 bytes Wawi Source/Images/world.gif | Bin 0 -> 954 bytes Wawi Source/Log.ico | Bin 0 -> 318 bytes Wawi Source/Operations.txt | 51 + Wawi Source/Resource.rc | 411 ++++++++ Wawi Source/Wawi_Readme.txt | 231 +++++ Wawi Source/WebAdmin.cpp | 530 ++++++++++ Wawi Source/browse.cpp | 460 +++++++++ Wawi Source/browse.ico | Bin 0 -> 318 bytes Wawi Source/dir.gif | Bin 0 -> 887 bytes Wawi Source/download.gif | Bin 0 -> 871 bytes Wawi Source/file.gif | Bin 0 -> 871 bytes Wawi Source/gen_httpServ.dsp | 407 ++++++++ Wawi Source/gen_httpServ.dsw | 29 + Wawi Source/html.cpp | 400 ++++++++ Wawi Source/html.h | 20 + Wawi Source/main.cpp | 299 ++++++ Wawi Source/main.h | 96 ++ Wawi Source/makepimp.exe | Bin 0 -> 102400 bytes Wawi Source/net_http_html.cpp | 280 +++++ Wawi Source/op_winamp.cpp | 1027 +++++++++++++++++++ Wawi Source/op_winamp.h | 35 + Wawi Source/pimp.bat | 2 + Wawi Source/playdir.gif | Bin 0 -> 904 bytes Wawi Source/playlist.gif | Bin 0 -> 901 bytes Wawi Source/plugin.h | 14 + Wawi Source/resource.h | 118 +++ Wawi Source/security.cpp | 312 ++++++ Wawi Source/server.ico | Bin 0 -> 318 bytes Wawi Source/strings.cpp | 265 +++++ Wawi Source/types.h | 108 ++ Wawi Source/users.ico | Bin 0 -> 318 bytes Wawi Source/wafile.gif | Bin 0 -> 878 bytes Wawi Source/wamessage.h | 45 + Wawi Source/wawi_large.gif | Bin 0 -> 5417 bytes Wawi Source/wawi_small.gif | Bin 0 -> 22973 bytes Wawi Source/webpage.ico | Bin 0 -> 318 bytes Wawi Source/winamp.m3u | 261 +++++ Wawi_7-5-13.exe | Bin 0 -> 112561 bytes gen_httpSrv_systray/Images/SECUR08.ICO | Bin 0 -> 1078 bytes gen_httpSrv_systray/Images/Title.bmp | Bin 0 -> 35710 bytes gen_httpSrv_systray/Images/auth2.ico | Bin 0 -> 1078 bytes gen_httpSrv_systray/Images/next.bmp | Bin 0 -> 114 bytes gen_httpSrv_systray/Images/next.ico | Bin 0 -> 1078 bytes gen_httpSrv_systray/Images/pause.ICO | Bin 0 -> 1078 bytes gen_httpSrv_systray/Images/pause.bmp | Bin 0 -> 114 bytes gen_httpSrv_systray/Images/play.bmp | Bin 0 -> 114 bytes gen_httpSrv_systray/Images/play.ico | Bin 0 -> 1078 bytes gen_httpSrv_systray/Images/prev.bmp | Bin 0 -> 114 bytes gen_httpSrv_systray/Images/prev.ico | Bin 0 -> 1078 bytes gen_httpSrv_systray/Images/server.ico | Bin 0 -> 318 bytes gen_httpSrv_systray/Images/stop.bmp | Bin 0 -> 114 bytes gen_httpSrv_systray/Images/stop.ico | Bin 0 -> 1078 bytes gen_httpSrv_systray/Images/winamp.ico | Bin 0 -> 318 bytes gen_httpSrv_systray/WawiTray Readme.txt | 64 ++ gen_httpSrv_systray/client.ini | 15 + gen_httpSrv_systray/config.cpp | 453 ++++++++ gen_httpSrv_systray/connection.cpp | 340 ++++++ gen_httpSrv_systray/gen_httpSrv_systray.dsp | 188 ++++ gen_httpSrv_systray/gen_httpSrv_systray.dsw | 29 + gen_httpSrv_systray/main.cpp | 333 ++++++ gen_httpSrv_systray/main.h | 61 ++ gen_httpSrv_systray/next.ico | Bin 0 -> 1078 bytes gen_httpSrv_systray/pause.ICO | Bin 0 -> 1078 bytes gen_httpSrv_systray/play.ico | Bin 0 -> 1078 bytes gen_httpSrv_systray/prev.ico | Bin 0 -> 1078 bytes gen_httpSrv_systray/resource.h | 67 ++ gen_httpSrv_systray/resource1.aps | Bin 0 -> 73584 bytes gen_httpSrv_systray/resource1.rc | 363 +++++++ gen_httpSrv_systray/stop.ico | Bin 0 -> 1078 bytes gen_httpSrv_systray/title.cpp | 32 + gen_httpSrv_systray/wawitray.exe | Bin 0 -> 94208 bytes install.sh | 39 + winamp-mpris.service | 2 +- winamp_mpris.py | 63 +- 120 files changed, 9092 insertions(+), 10 deletions(-) create mode 100644 Wawi Source/ClientConnection.cpp create mode 100644 Wawi Source/Config.cpp create mode 100644 Wawi Source/Config_users.cpp create mode 100644 Wawi Source/DeletePlaylistEntry.cpp create mode 100644 Wawi Source/HTTPServer.exe create mode 100644 Wawi Source/Images/OK.gif create mode 100644 Wawi Source/Images/Title Graphic/Wawi.jpg create mode 100644 Wawi Source/Images/about.gif create mode 100644 Wawi Source/Images/admin.gif create mode 100644 Wawi Source/Images/black.gif create mode 100644 Wawi Source/Images/browse.gif create mode 100644 Wawi Source/Images/frames_one.bmp create mode 100644 Wawi Source/Images/frames_one_lg.bmp create mode 100644 Wawi Source/Images/frames_three.bmp create mode 100644 Wawi Source/Images/frames_three_lg.bmp create mode 100644 Wawi Source/Images/frames_two.bmp create mode 100644 Wawi Source/Images/frames_two_lg.bmp create mode 100644 Wawi Source/Images/list_delete.gif create mode 100644 Wawi Source/Images/list_play.gif create mode 100644 Wawi Source/Images/main.gif create mode 100644 Wawi Source/Images/next.gif create mode 100644 Wawi Source/Images/pause.gif create mode 100644 Wawi Source/Images/play.gif create mode 100644 Wawi Source/Images/playlist.gif create mode 100644 Wawi Source/Images/popup.gif create mode 100644 Wawi Source/Images/prev.gif create mode 100644 Wawi Source/Images/randomoff.gif create mode 100644 Wawi Source/Images/randomon.gif create mode 100644 Wawi Source/Images/repeatoff.gif create mode 100644 Wawi Source/Images/repeaton.gif create mode 100644 Wawi Source/Images/stop.gif create mode 100644 Wawi Source/Images/stopslow.gif create mode 100644 Wawi Source/Images/vol0.gif create mode 100644 Wawi Source/Images/vol1.gif create mode 100644 Wawi Source/Images/vol10.gif create mode 100644 Wawi Source/Images/vol2.gif create mode 100644 Wawi Source/Images/vol3.gif create mode 100644 Wawi Source/Images/vol4.gif create mode 100644 Wawi Source/Images/vol5.gif create mode 100644 Wawi Source/Images/vol6.gif create mode 100644 Wawi Source/Images/vol7.gif create mode 100644 Wawi Source/Images/vol8.gif create mode 100644 Wawi Source/Images/vol9.gif create mode 100644 Wawi Source/Images/volume-all.bmp create mode 100644 Wawi Source/Images/wa.ico create mode 100644 Wawi Source/Images/winamp.ico create mode 100644 Wawi Source/Images/world.gif create mode 100644 Wawi Source/Log.ico create mode 100644 Wawi Source/Operations.txt create mode 100644 Wawi Source/Resource.rc create mode 100644 Wawi Source/Wawi_Readme.txt create mode 100644 Wawi Source/WebAdmin.cpp create mode 100644 Wawi Source/browse.cpp create mode 100644 Wawi Source/browse.ico create mode 100644 Wawi Source/dir.gif create mode 100644 Wawi Source/download.gif create mode 100644 Wawi Source/file.gif create mode 100644 Wawi Source/gen_httpServ.dsp create mode 100644 Wawi Source/gen_httpServ.dsw create mode 100644 Wawi Source/html.cpp create mode 100644 Wawi Source/html.h create mode 100644 Wawi Source/main.cpp create mode 100644 Wawi Source/main.h create mode 100644 Wawi Source/makepimp.exe create mode 100644 Wawi Source/net_http_html.cpp create mode 100644 Wawi Source/op_winamp.cpp create mode 100644 Wawi Source/op_winamp.h create mode 100644 Wawi Source/pimp.bat create mode 100644 Wawi Source/playdir.gif create mode 100644 Wawi Source/playlist.gif create mode 100644 Wawi Source/plugin.h create mode 100644 Wawi Source/resource.h create mode 100644 Wawi Source/security.cpp create mode 100644 Wawi Source/server.ico create mode 100644 Wawi Source/strings.cpp create mode 100644 Wawi Source/types.h create mode 100644 Wawi Source/users.ico create mode 100644 Wawi Source/wafile.gif create mode 100644 Wawi Source/wamessage.h create mode 100644 Wawi Source/wawi_large.gif create mode 100644 Wawi Source/wawi_small.gif create mode 100644 Wawi Source/webpage.ico create mode 100644 Wawi Source/winamp.m3u create mode 100644 Wawi_7-5-13.exe create mode 100644 gen_httpSrv_systray/Images/SECUR08.ICO create mode 100644 gen_httpSrv_systray/Images/Title.bmp create mode 100644 gen_httpSrv_systray/Images/auth2.ico create mode 100644 gen_httpSrv_systray/Images/next.bmp create mode 100644 gen_httpSrv_systray/Images/next.ico create mode 100644 gen_httpSrv_systray/Images/pause.ICO create mode 100644 gen_httpSrv_systray/Images/pause.bmp create mode 100644 gen_httpSrv_systray/Images/play.bmp create mode 100644 gen_httpSrv_systray/Images/play.ico create mode 100644 gen_httpSrv_systray/Images/prev.bmp create mode 100644 gen_httpSrv_systray/Images/prev.ico create mode 100644 gen_httpSrv_systray/Images/server.ico create mode 100644 gen_httpSrv_systray/Images/stop.bmp create mode 100644 gen_httpSrv_systray/Images/stop.ico create mode 100644 gen_httpSrv_systray/Images/winamp.ico create mode 100644 gen_httpSrv_systray/WawiTray Readme.txt create mode 100644 gen_httpSrv_systray/client.ini create mode 100644 gen_httpSrv_systray/config.cpp create mode 100644 gen_httpSrv_systray/connection.cpp create mode 100644 gen_httpSrv_systray/gen_httpSrv_systray.dsp create mode 100644 gen_httpSrv_systray/gen_httpSrv_systray.dsw create mode 100644 gen_httpSrv_systray/main.cpp create mode 100644 gen_httpSrv_systray/main.h create mode 100644 gen_httpSrv_systray/next.ico create mode 100644 gen_httpSrv_systray/pause.ICO create mode 100644 gen_httpSrv_systray/play.ico create mode 100644 gen_httpSrv_systray/prev.ico create mode 100644 gen_httpSrv_systray/resource.h create mode 100644 gen_httpSrv_systray/resource1.aps create mode 100644 gen_httpSrv_systray/resource1.rc create mode 100644 gen_httpSrv_systray/stop.ico create mode 100644 gen_httpSrv_systray/title.cpp create mode 100644 gen_httpSrv_systray/wawitray.exe create mode 100755 install.sh diff --git a/Wawi Source/ClientConnection.cpp b/Wawi Source/ClientConnection.cpp new file mode 100644 index 0000000..29c04f8 --- /dev/null +++ b/Wawi Source/ClientConnection.cpp @@ -0,0 +1,541 @@ +/* --- CLIENTCONNECTION.CPP --- +/ +/ Written by Phil Himsworth, 2001-2002. +/ +/*/ + +#include +#include "types.h" +#include "wamessage.h" +#include "main.h" +#include "op_winamp.h" +#include "html.h" +#include "plugin.h" +#include "resource.h" + + +extern char mp3root[MAX_PATH], logfiledir[MAX_PATH]; +extern int dl_wa_files, dl_other_files, frames, title_refresh; +extern char szAppVer[]; +extern char pagetitle[255]; + +extern winampGeneralPurposePlugin plugin; + +bool loglocked = false; + +char realm_server[] = "Wawi Server Control"; +char realm_control[] = "Wawi Playback Control"; +char realm_clear[] = "Wawi Playlist Clear Control"; +char realm_playlist[] = "Wawi Playlist Control"; +char realm_download[] = "Wawi Downloads"; +char realm_browse[] = "Wawi Music Collection"; + +CControl Control; + +// -------------------------------------------------------------------------------- +// Thread called for each connection +DWORD WINAPI ClientConnection(LPVOID socket_param) // new thread for a new client. +{ + + + bool matched = false; + connection conn; // structure to hold request details + ZeroMemory(&conn,sizeof(conn)); + conn.http.auth = AUTH_ANON; + wsprintf(conn.http.user,"anon"); + conn.log = true; + conn.state = ST_NONE; + conn.http.responsecode = 200; + + conn.socket = (SOCKET)socket_param; // convert param into socket + + + int rhost_len = sizeof(conn.remote_host); + getpeername(conn.socket,(sockaddr*)&conn.remote_host,&rhost_len); + + if (!GetRequest(&conn)) + { + //MessageBox(NULL,conn.http.file,"400",MB_TOPMOST | MB_OK); + conn.http.responsecode = 400; + Send400(&conn); + shutdown(conn.socket,0); + closesocket(conn.socket); + MakeLogEntry(&conn); + return true; + } + + + +// ------------- Images ------------------ + // Of the form /img?image=n where 'n' is the id of the image, eg. IDR_DIRECTORY. + if (StrComp(conn.http.page,"/img")) + { + //MessageBox(NULL,conn.http.file,"File",MB_OK | MB_TOPMOST); + //MessageBox(NULL,conn.http.page,"Page",MB_OK | MB_TOPMOST); + conn.log = false; + conn.state = Control.Image(&conn,IMG_GIF); + } + +// ------------- Favicon.ico!!!----------- + // Sent the same as a img resource but with a different header + if (StrComp(conn.http.page,"/favicon.ico")) + { + //conn.log = false; + wsprintf(conn.http.file,"/img?%d",IDR_ICO_WINAMP); + conn.state = Control.Image(&conn,IMG_ICO); + } + + +// ------------ Top ----------------- + if (StrComp(conn.http.page,"/top")) + { + conn.log = false; + conn.state = Control.TopFrame(&conn); + } + + +// ------------- Small Title ------------ +// No page formatting at all; just the song info. + + if (StrComp(conn.http.page,"/smalltitle")) + conn.state = Control.SmallTitle(&conn); + + +// -------------- Title ---------------- + if (StrComp(conn.http.page,"/title")) + { + conn.log = false; + conn.state = Control.Title(&conn); + } + + +// ---------- Shutdown Computer ------------- + if (StrComp(conn.http.page,"/shutdown")) + { + if (!(conn.http.auth & AUTH_SERVER)) + conn.state = SendBasic401(&conn,realm_server); + else + conn.state = Control.Shutdown(&conn); + + } + + + +// ---------- Clear Playlist ----- + if (StrComp(conn.http.page,"/clear")) + { + if (!(conn.http.auth & AUTH_CLEAR)) + conn.state = SendBasic401(&conn,realm_playlist); + else + conn.state = Control.Clear(&conn); + } + + +// ---------- Sort playlist ---------- + if (StrComp(conn.http.page,"/sort")) + { + if (!(conn.http.auth & AUTH_PLAYLIST)) + conn.state = SendBasic401(&conn,realm_playlist); + else + conn.state = Control.Sort(&conn); + } + + + + +// ------------ Browse ----------- + if (StrComp(conn.http.page,"/browse")) + { + if (!(conn.http.auth & AUTH_BROWSE)) + conn.state = SendBasic401(&conn,realm_browse); + else + { + char mp3path[MAX_PATH]; + if (GetArgValue(&conn,"path",(char*)&mp3path,MAX_PATH) == false) + wsprintf(mp3path,"%%5c"); + ReplaceSlashes(mp3path); + conn.state = Browse(&conn, mp3path); + if (frames == 1) + LinkBar(&conn); + } + } + +// ------------ Download --------- + if (StrComp(conn.http.page,"/dl")) + if (!(conn.http.auth & AUTH_DOWNLOAD)) + conn.state = SendBasic401(&conn,realm_download); + else + conn.state = Control.Download(&conn); + + + +// ------------ Load ------------- + if (StrComp(conn.http.page,"/ld")) // ld = load + { + if (!(conn.http.auth & AUTH_PLAYLIST)) + conn.state = SendBasic401(&conn,realm_playlist); + else + conn.state = Control.Load(&conn); + } + +// ------------ List ------------- + if (StrComp(conn.http.page,"/list")) + conn.state = Control.List(&conn); + + +// ------------ Next ------------- + if (StrComp(conn.http.page,"/next")) // Next track + { + if (!(conn.http.auth & AUTH_CONTROL)) + conn.state = SendBasic401(&conn,realm_control); + else + conn.state = Control.Next(&conn); + } + + +// ------------ Prev ------------- + if (StrComp(conn.http.page,"/prev")) // Previous track + { + if (!(conn.http.auth & AUTH_CONTROL)) + conn.state = SendBasic401(&conn,realm_control); + else + conn.state = Control.Prev(&conn); + } + + +// ------------ Play ------------- + if (StrComp(conn.http.page,"/play")) + // Play (or play?xxxx) + { + if (!(conn.http.auth & AUTH_CONTROL)) + conn.state = SendBasic401(&conn,realm_control); + else + conn.state = Control.Play(&conn); + } + +// ------------ Stop ------------- + if (StrComp(conn.http.page,"/stop")) + { + if (!(conn.http.auth & AUTH_CONTROL)) + conn.state = SendBasic401(&conn,realm_control); + else + conn.state = Control.Stop(&conn); + } + +// ----------- Stop slowly ----------- + + if (StrComp(conn.http.page,"/stopslow")) + { + if (!(conn.http.auth & AUTH_CONTROL)) + conn.state = SendBasic401(&conn,realm_control); + else + conn.state = Control.StopSlow(&conn); + } + + +// ------------ Pause ------------ + if (StrComp(conn.http.page,"/pause")) + { + if (!(conn.http.auth & AUTH_CONTROL)) + conn.state = SendBasic401(&conn,realm_control); + else + conn.state = Control.Pause(&conn); + } + +// ------------ Volume ----------- + if (StrComp(conn.http.page,"/vol")) + { + if (!(conn.http.auth & AUTH_CONTROL)) + conn.state = SendBasic401(&conn,realm_control); + else + conn.state = Control.Volume(&conn); + } + +// ----------- Random / Repeat -------------- + if (StrComp(conn.http.page,"/playmode")) + { + if (!(conn.http.auth & AUTH_CONTROL)) + conn.state = SendBasic401(&conn,realm_control); + else + conn.state = Control.Playmode(&conn); + } + +// ------------- Login/out--------------- + if (StrComp(conn.http.page,"/login")) + conn.state = SendBasic401(&conn,"Winamp Web Interface"); + +// ------------ About ---------------- + + if (StrComp(conn.http.page,"/about")) + { + conn.state = Control.About(&conn); + } + + +// ---------- Delete playlist entry ---- + if (StrComp(conn.http.page,"/delete")) + { + if (!(conn.http.auth & AUTH_CLEAR)) + conn.state = SendBasic401(&conn,realm_clear); + else + conn.state = Control.Delete(&conn); + } + + +// ---------- Stylesheet ------------- + if (StrComp(conn.http.page,"/wawi.css")) + { + conn.log = false; + conn.state = Control.UserStyle(&conn); + } + +// ------------ Main page ---------------- + if (StrComp(conn.http.page,"/main")) + { + conn.state = Control.Main(&conn); + } + + +// ------------ PDA Page ---------------- + if (StrComp(conn.http.page,"/pda")) + { + conn.state = Control.pda(&conn); + } + +// ------------ Admin ------------------ + if (StrComp(conn.http.page,"/admin")) + { + if (!(conn.http.auth & AUTH_SERVER)) + conn.state = SendBasic401(&conn,realm_server); + else + conn.state = Control.WebAdmin(&conn); + } + + if (StrComp(conn.http.page,"/apply")) + { + if (!(conn.http.auth & AUTH_SERVER)) + conn.state = SendBasic401(&conn,realm_server); + else + conn.state = Control.ApplyAdmin(&conn); + } + + +// -------------- Users ----------------- + if (StrComp(conn.http.page,"/user")) + { + if (!(conn.http.auth & AUTH_SERVER)) + conn.state = SendBasic401(&conn,realm_server); + else + conn.state = Control.User(&conn); + } + +// ------ Set user permissions ------------ + if (StrComp(conn.http.page,"/setuser")) + { + if (!(conn.http.auth & AUTH_SERVER)) + conn.state = SendBasic401(&conn,realm_server); + else + conn.state = Control.SetUser(&conn); + } + +// ------ Save playlist ------------ + if (StrComp(conn.http.page,"/save")) + { + if (!(conn.http.auth & AUTH_PLAYLIST)) + conn.state = SendBasic401(&conn,realm_playlist); + else + conn.state = Control.SavePlaylist(&conn); + } + + +// ------ Page redirect - page?page=(main|list|browse) + if (StrComp(conn.http.page,"/page")) + { + char page[10]; + GetArgValue(&conn,"page",page,10); + + if (!(StrComp(page,"main") || StrComp(page,"list") || StrComp(page,"browse"))) + wsprintf(page,"main"); + + prints(&conn,"HTTP/1.0 302 Temporarily Moved\nLocation: /"); + prints(&conn,page); + prints(&conn,"\nConnection: close\nContent-type: text/html\n\n"); + prints(&conn,"\n\nWinamp Web Interface\n\n"); + prints(&conn,"\n

Winamp Web Interface

\n\n\n\n"); + + conn.state = ST_CLOSE; + } + + + + + + if (StrComp(conn.http.page,"/winamp")) + { + OpenHTTPHeader(&conn,"text/html",0,NULL); + if (conn.http.reqID == RID_HEAD) + conn.state = ST_CLOSE; + else + { + char reqpage[10]; + GetArgValue(&conn,"page",reqpage,10); + + if (!(StrComp(reqpage,"main") || StrComp(reqpage,"list") || StrComp(reqpage,"browse"))) + wsprintf(reqpage,"main"); + + OpenHtmlHeader(&conn); + Style(&conn); + CloseHeader(&conn); + if (frames == 3) + { + prints(&conn,"\n\n\n\n"); + prints(&conn,"<p><b>Frames are required for this site!<b></p><p>If no-frames operation is required, check the <b>No Frames Mode</b> box in the Options screen.</p>\n"); + prints(&conn,"</frameset>\n"); + } + else + { + prints(&conn,"<frameset border=\"0\" frameborder=\"0\" rows=\"35,1*\">\n<frame name=\"top\" src=\"/top\" noresize marginheight=\"0\" marginwidth=\"0\">\n<frame name=\"main\" src=\"/page?page="); + prints(&conn,reqpage); + prints(&conn,"\" noresize>\n"); + prints(&conn,"<noframes><p><b>Frames are required for this site!<b></p><p>If no-frames operation is required, check the <b>No Frames Mode</b> box in the Options screen.</p>\n"); + prints(&conn,"</frameset>\n"); + } + + conn.state = ST_CLOSEBODY; + } + } + + if (conn.state == ST_NONE) // something else, including '/' + { // 302 to /winamp?page=frames + if (frames == 1) + { + prints(&conn,"HTTP/1.0 302 Temporarily Moved\nLocation: /page?page=main\nConnection: close\nContent-type: text/html\n\n"); + prints(&conn,"<html>\n<head>\n<title>Winamp Web Interface</title>\n</head>\n"); + prints(&conn,"<body>\n<p><a href=\"/page?page=main\">Winamp Web Interface</a></p>\n</body>\n</html>\n\n"); + } + else + { + prints(&conn,"HTTP/1.0 302 Temporarily Moved\nLocation: /winamp?page=main\nConnection: close\nContent-type: text/html\n\n"); + prints(&conn,"<html>\n<head>\n<title>Winamp Web Interface</title>\n</head>\n"); + prints(&conn,"<body>\n<p><a href=\"/winamp?page=main\">Winamp Web Interface</a></p>\n</body>\n</html>\n\n"); + } + //conn.log = false; + conn.state = ST_CLOSE; + } + + if (conn.state == ST_CLOSEBODY) + CloseBody(&conn); // end html + + + flush(&conn); + closesocket(conn.socket); // close connection + + if (conn.log) + MakeLogEntry(&conn); + + + return true; +}; + +/* +struct HOSTENT FAR * gethostbyaddr ( + const char FAR * addr, + int len, + int type +); +*/ + +// -------------------------------------------------------------------------------- +// Adds entry in log +void MakeLogEntry(connection * conn) +{ + int logbuffer_len; + + SYSTEMTIME time; + GetSystemTime(&time); + char timestr[100]; // "[DD/MM/YYYY HH:MM:SS]" + wsprintf(timestr,"[%02d.%02d.%04d %02d:%02d:%02d]",time.wDay, time.wMonth, time.wYear, time.wHour, time.wMinute, time.wSecond); + + char logbuffer[2048]; + ZeroMemory(&logbuffer,sizeof(logbuffer)); + + logbuffer_len = wsprintf(logbuffer,"%s %s %s %d %s %s\r\n",timestr, (char*)inet_ntoa(conn->remote_host.sin_addr), conn->http.user, conn->http.responsecode, conn->http.request, conn->http.file); + + // Find log file, in winamp plugin directory (same dir as gen_httpsrv.dll) + char logfilepath[MAX_PATH], *p; + char logfile[MAX_PATH]; + + if (lstrlen(logfiledir) == 0) + { + GetModuleFileName(plugin.hDllInstance,logfilepath,sizeof(logfilepath)); + p=logfilepath+lstrlen(logfilepath); + while (p >= logfilepath && *p != '\\') p--; + if (++p >= logfilepath) *p = 0; + wsprintf(logfile,"%shttpsrv.log",logfilepath); + } + else + { + lstrcpy(logfilepath,logfiledir); + wsprintf(logfile,"%s\\httpsrv.log",logfilepath); + } + + //lstrcat(logfile,"gen_httpsrv_log.log); + + //MessageBox(NULL,logfile,"Logfile",MB_OK| MB_TOPMOST); + + while(loglocked == true) // wait for log file to be free + Sleep(50); + + loglocked = true; // lock it + + HANDLE hLog = CreateFile( logfile, + GENERIC_WRITE, + 0, + 0, + OPEN_ALWAYS, + 0, + 0); + + if (hLog == NULL) + { + //MessageBox(NULL,"Couldn't open log file","gen_httpSrv debug", MB_OK); + return; + } + + DWORD dwSize = GetFileSize(hLog, NULL); + + //MessageBox(NULL,logfilename,"logfile size",MB_OK); + SetFilePointer(hLog,(LONG)dwSize,NULL,FILE_BEGIN); + + unsigned long written; + WriteFile(hLog,&logbuffer,logbuffer_len,&written,NULL); + + CloseHandle(hLog); + + if (dwSize >= 50000) // rename log file to something else to start a new one + { + char logfilename[MAX_PATH]; + bool name_used = true; + int letter = 1; + while(name_used) + { // loop through acceptable names, find first unused one of form httpsrv_dd-dd-yyyy_n.log + wsprintf(logfilename,"%shttpsrv_%d-%d-%d_%d.log",logfilepath,time.wDay,time.wMonth,time.wYear,letter); + //MessageBox(NULL,logfilename,"Logfilename",MB_OK | MB_TOPMOST); + if (GetFileAttributes(logfilename) == 0xFFFFFFFF) + { + name_used = false; + MoveFile(logfile,logfilename); + } + else + { + letter++; + } + } + } + + loglocked = false; // release log file +} \ No newline at end of file diff --git a/Wawi Source/Config.cpp b/Wawi Source/Config.cpp new file mode 100644 index 0000000..f10382c --- /dev/null +++ b/Wawi Source/Config.cpp @@ -0,0 +1,535 @@ +/* --- CONFIG.CPP --- +/ +/ Written by Phil Himsworth, 2001-2002. +/ +/*/ + + +#include <windows.h> +#include <prsht.h> + +#include "types.h" +#include "main.h" +#include "resource.h" +#include "plugin.h" + +extern int con_port, hide_error, frames, securepassword, pass_debug; +extern int show_other_files, dl_wa_files, dl_other_files, title_refresh; + +extern char mp3root[MAX_PATH], playlistdir[MAX_PATH], filetypes[255], pagetitle[255], logfiledir[MAX_PATH]; + + +extern char szAppVer[], szAppName[]; +extern winampGeneralPurposePlugin plugin; + +HWND ConfigWnd = NULL; // To ensure only one config window appears at once +HWND UsersWnd = NULL; + +// -------------------------------------------------------------------------------- +// Server options window proc +BOOL CALLBACK ConfigServerWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + char TempString[10]; + int port_temp; + switch(uMsg) + { + case WM_INITDIALOG: + wsprintf(TempString,"%d",con_port); + SetDlgItemText(hwndDlg,IDC_PORT_EDIT,TempString); + CheckDlgButton(hwndDlg,IDC_SECUREPASSWORD,securepassword); + CheckDlgButton(hwndDlg,IDC_PASS_DEBUG,pass_debug); + CheckDlgButton(hwndDlg,IDC_HIDE_ERROR,hide_error); + break; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDC_SECUREPASSWORDHELP: + MessageBox(hwndDlg,"Secure Passwords...\n\nWawi is able to encrypt passwords in the config file using the MD5 algorithm, or they can just be stored as jumbled but potentially retrievable strings using the Base64 algorithm.\n\nLeave this checked unless you have problems. Note that changing between secure and insecure passwords will require entering all passwords in again.\n\nThe \"debug\" option is in case of further trouble. This will make message boxes pop up telling you what it is doing when saving a password; if it doesn't work let me know what these say and I'll see what I can do. Ta...","Winamp Web Interface Help",MB_OK); + break; + } + break; + + case WM_NOTIFY: + switch (((NMHDR FAR *) lParam)->code) + { + case PSN_APPLY: port_temp = GetDlgItemInt(hwndDlg,IDC_PORT_EDIT,NULL,false); + if (port_temp > 0 && port_temp < 65536) + { + con_port = port_temp; + hide_error = IsDlgButtonChecked(hwndDlg,IDC_HIDE_ERROR); + securepassword = IsDlgButtonChecked(hwndDlg,IDC_SECUREPASSWORD); + pass_debug = IsDlgButtonChecked(hwndDlg,IDC_PASS_DEBUG); + } + else + { + MessageBox(hwndDlg,"Port must be from 1 to 65535!","Winamp Web Interface",MB_OK); + SetDlgItemInt(hwndDlg,IDC_PORT_EDIT,con_port,false); + SetWindowLong(hwndDlg,DWL_MSGRESULT,true); + return true; + } + break; + } + break; + } + return false; +} + + +// -------------------------------------------------------------------------------- +// Web page options window proc +BOOL CALLBACK ConfigWebPageWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + char TempString[10]; + HANDLE img; + switch(uMsg) + { + case WM_INITDIALOG: + + wsprintf(TempString,"%d",title_refresh); + SetDlgItemText(hwndDlg,IDC_REFRESH,TempString); + SetDlgItemText(hwndDlg,IDC_PAGETITLE,pagetitle); + + /* + LONG SendDlgItemMessage( + HWND hDlg, // handle of dialog box + int nIDDlgItem, // identifier of control + UINT Msg, // message to send + WPARAM wParam, // first message parameter + LPARAM lParam // second message parameter + ); + */ + + + switch(frames) + { + case 1: CheckDlgButton(hwndDlg,IDC_NOFRAMES,1); + img = LoadImage(plugin.hDllInstance,MAKEINTRESOURCE(IDB_FRAMES_ONE),IMAGE_BITMAP,0,0,0); + SendDlgItemMessage(hwndDlg,IDC_FRAMEIMG,STM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)img); + CloseHandle(img); + break; + case 3: CheckDlgButton(hwndDlg,IDC_THREEFRAMES,1); + img = LoadImage(plugin.hDllInstance,MAKEINTRESOURCE(IDB_FRAMES_THREE),IMAGE_BITMAP,0,0,0); + SendDlgItemMessage(hwndDlg,IDC_FRAMEIMG,STM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)img); + CloseHandle(img); + break; + default: CheckDlgButton(hwndDlg,IDC_TWOFRAMES,1); + img = LoadImage(plugin.hDllInstance,MAKEINTRESOURCE(IDB_FRAMES_TWO),IMAGE_BITMAP,0,0,0); + SendDlgItemMessage(hwndDlg,IDC_FRAMEIMG,STM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)img); + CloseHandle(img); + break; + } + break; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDC_PAGETITLEHELP: + MessageBox(hwndDlg,"Page Title...\n\nThis text is what appears as the title on the main page on a user's browser. It can be up to 255 characters long, but should be made to fit into the width of a page in the browser.\n\nHTML tags can be included.","Winamp Web Interface Help",MB_OK); + break; + case IDC_NOFRAMES: + if (HIWORD(wParam) == BN_CLICKED) + { + //MessageBox(hwndDlg,"No frames","wawi",MB_OK| MB_TOPMOST); + img = LoadImage(plugin.hDllInstance,MAKEINTRESOURCE(IDB_FRAMES_ONE),IMAGE_BITMAP,0,0,0); + SendDlgItemMessage(hwndDlg,IDC_FRAMEIMG,STM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)img); + CloseHandle(img); + } + break; + case IDC_TWOFRAMES: + if (HIWORD(wParam) == BN_CLICKED) + { + //MessageBox(hwndDlg,"Two frames","wawi",MB_OK| MB_TOPMOST); + img = LoadImage(plugin.hDllInstance,MAKEINTRESOURCE(IDB_FRAMES_TWO),IMAGE_BITMAP,0,0,0); + SendDlgItemMessage(hwndDlg,IDC_FRAMEIMG,STM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)img); + CloseHandle(img); + } + break; + case IDC_THREEFRAMES: + if (HIWORD(wParam) == BN_CLICKED) + { + //MessageBox(hwndDlg,"Three frames","wawi",MB_OK| MB_TOPMOST); + img = LoadImage(plugin.hDllInstance,MAKEINTRESOURCE(IDB_FRAMES_THREE),IMAGE_BITMAP,0,0,0); + SendDlgItemMessage(hwndDlg,IDC_FRAMEIMG,STM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)img); + CloseHandle(img); + } + break; + + } + break; + + case WM_NOTIFY: + switch (((NMHDR FAR *) lParam)->code) + { + case PSN_APPLY: GetDlgItemText(hwndDlg,IDC_PAGETITLE,(char*)pagetitle,255); + title_refresh = GetDlgItemInt(hwndDlg,IDC_REFRESH,NULL,false); + + if (IsDlgButtonChecked(hwndDlg,IDC_NOFRAMES)) + frames = 1; + else + if (IsDlgButtonChecked(hwndDlg,IDC_THREEFRAMES)) + frames = 3; + else + frames = 2; + + break; + } + break; + } + return false; +} + +// -------------------------------------------------------------------------------- +// Browse options window proc +BOOL CALLBACK ConfigBrowseWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + int length; + switch(uMsg) + { + case WM_INITDIALOG: + CheckDlgButton(hwndDlg,IDC_WA_FILES_SHOW,1); + CheckDlgButton(hwndDlg,IDC_OTHER_FILES_SHOW,show_other_files); + CheckDlgButton(hwndDlg,IDC_WA_FILES_DL,dl_wa_files); + CheckDlgButton(hwndDlg,IDC_OTHER_FILES_DL,dl_other_files); + + SetDlgItemText(hwndDlg,IDC_MP3_ROOT,mp3root); + SetDlgItemText(hwndDlg,IDC_FILETYPES,filetypes); + SetDlgItemText(hwndDlg,IDC_PLAYLISTDIR,playlistdir); + + break; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDC_ROOTDIRHELP: + MessageBox(hwndDlg,"Root Music Directory...\n\nEnter the path of the directory you want users to be able to browse. Any files and folders within this folder will appear in the Music Collection. Files and folders outside this folder will not be accessible.","Winamp Web Interface Help",MB_OK); + break; + case IDC_FILETYPEHELP: + MessageBox(hwndDlg,"Loadable Filetypes...\n\nEnter file extensions of files that winamp can play, separated by spaces. For example, entering \"mp3 wav mid\" will enable files with those extensions to be clicked on and played from the browser.\n\nIncluding 'url' will enable Wawi to follow internet shortcuts to load songs or streams rather than just treat them as non-winamp files.","Winamp Web Interface Help",MB_OK); + break; + case IDC_PLAYLISTDIRHELP: + MessageBox(hwndDlg,"Playlist Directory...\n\nWhen a playlist is saved from the web interface it is saved in this directory. The name given here is relative to the Root Music Directory; for example if the root directory is \"c:\\mp3\" and the playlist directory is \"playlists\", saved playlists will be stored in \"c:\\mp3\\playlists\\\".\n\nEnsure the directory exists before saving playlists into it!", "Winamp Web Interface Help", MB_OK); + break; + + } + break; + + case WM_NOTIFY: + switch (((NMHDR FAR *) lParam)->code) + { + case PSN_APPLY: show_other_files = IsDlgButtonChecked(hwndDlg,IDC_OTHER_FILES_SHOW); + dl_other_files = IsDlgButtonChecked(hwndDlg,IDC_OTHER_FILES_DL); + dl_wa_files = IsDlgButtonChecked(hwndDlg,IDC_WA_FILES_DL); + + GetDlgItemText(hwndDlg,IDC_FILETYPES,(char*)filetypes,255); + + length = GetDlgItemText(hwndDlg,IDC_MP3_ROOT,(char*)mp3root,MAX_PATH); + if (mp3root[length-1] == '\\') + mp3root[length-1] = 0; // chop off trailing '\' + else + mp3root[length] = 0; // make null terminated + + length = GetDlgItemText(hwndDlg,IDC_PLAYLISTDIR,(char*)playlistdir,MAX_PATH); + if (playlistdir[length-1] == '\\') + playlistdir[length-1] = 0; // chop off trailing '\' + else + playlistdir[length] = 0; // make null terminated + + + break; + } + break; + } + return false; +} + + +// -------------------------------------------------------------------------------- +// Log options window proc +BOOL CALLBACK ConfigLogWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + int length; + switch(uMsg) + { + case WM_INITDIALOG: + SetDlgItemText(hwndDlg,IDC_LOGFILEPATH,logfiledir); + + break; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDC_VIEWLOG: ViewLog(); + break; + } + break; + + case WM_NOTIFY: + switch (((NMHDR FAR *) lParam)->code) + { + case PSN_APPLY: length = GetDlgItemText(hwndDlg,IDC_LOGFILEPATH,(char*)logfiledir,MAX_PATH); + if (logfiledir[length-1] == '\\') + logfiledir[length-1] = 0; // chop off trailing '\' + else + logfiledir[length] = 0; // make null terminated + + + break; + } + break; + } + return false; +} + +// -------------------------------------------------------------------------------- +// About options window proc +BOOL CALLBACK ConfigAboutWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + HANDLE img; + char title[100]; + switch(uMsg) + { + case WM_INITDIALOG: + ConfigWnd = (HWND) (((NMHDR FAR *) lParam)->hwndFrom); + img = LoadImage(plugin.hDllInstance,MAKEINTRESOURCE(IDB_TITLE),IMAGE_BITMAP,0,0,0); + SendDlgItemMessage(hwndDlg,IDC_MAINIMAGE,STM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)img); + CloseHandle(img); + wsprintf(title,"Winamp Web Interface %s",szAppVer); + SetDlgItemText(hwndDlg,IDC_ABOUT_TITLE,title); + + break; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDOK: break; + default: break; + } + break; + + case WM_NOTIFY: + switch (((NMHDR FAR *) lParam)->code) + { + case PSN_APPLY: + break; + } + break; + } + return false; +} + + +// -------------------------------------------------------------------------------- +// Loading / Saving of config +void config_read() +{ + char ini_file[MAX_PATH], *p; + GetModuleFileName(plugin.hDllInstance,ini_file,sizeof(ini_file)); + p=ini_file+lstrlen(ini_file); + while (p >= ini_file && *p != '\\') p--; + if (++p >= ini_file) *p = 0; + lstrcat(ini_file,"gen_httpsrv.ini"); + + con_port = GetPrivateProfileInt(szAppName,"Port",80,ini_file); + hide_error = GetPrivateProfileInt(szAppName,"HideErrors",0,ini_file); + frames = GetPrivateProfileInt(szAppName,"Frames",2,ini_file); + securepassword = GetPrivateProfileInt(szAppName,"SecurePassword",1,ini_file); + pass_debug = GetPrivateProfileInt(szAppName,"PassDebug",0,ini_file); + + show_other_files = GetPrivateProfileInt(szAppName,"ShowOtherFiles",0,ini_file); + dl_wa_files = GetPrivateProfileInt(szAppName,"DLWaFiles",0,ini_file); + dl_other_files = GetPrivateProfileInt(szAppName,"DLOtherFiles",0,ini_file); + + title_refresh = GetPrivateProfileInt(szAppName,"TitleRefresh",60,ini_file); + + GetPrivateProfileString(szAppName,"filetypes","mp3 wav m3u url",(char*)&filetypes,255,ini_file); + GetPrivateProfileString(szAppName,"pagetitle","... Winamp Web Interface ...",(char*)&pagetitle,255,ini_file); + GetPrivateProfileString(szAppName,"logfiledir","",(char*)&logfiledir,MAX_PATH,ini_file); + GetPrivateProfileString(szAppName,"playlistdir","",(char*)&playlistdir,MAX_PATH,ini_file); + + int length = GetPrivateProfileString(szAppName,"mp3root","c:\\",(char*)&mp3root,MAX_PATH,ini_file); + + if (mp3root[length-1] == '\\') + mp3root[length-1] = 0; // chop off trailing '\' + else + mp3root[length] = 0; // make null terminated + +} + +void config_write() +{ + char ini_file[MAX_PATH], *p; + char string[32]; + GetModuleFileName(plugin.hDllInstance,ini_file,sizeof(ini_file)); + p=ini_file+lstrlen(ini_file); + while (p >= ini_file && *p != '\\') p--; + if (++p >= ini_file) *p = 0; + lstrcat(ini_file,"gen_httpsrv.ini"); + + wsprintf(string,"%d",con_port); + WritePrivateProfileString(szAppName,"Port",string,ini_file); + wsprintf(string,"%d",hide_error); + WritePrivateProfileString(szAppName,"HideErrors",string,ini_file); + wsprintf(string,"%d",frames); + WritePrivateProfileString(szAppName,"Frames",string,ini_file); + wsprintf(string,"%d",securepassword); + WritePrivateProfileString(szAppName,"Securepassword",string,ini_file); + wsprintf(string,"%d",pass_debug); + WritePrivateProfileString(szAppName,"PassDebug",string,ini_file); + + wsprintf(string,"%d",title_refresh); + WritePrivateProfileString(szAppName,"TitleRefresh",string,ini_file); + + wsprintf(string,"%d",show_other_files); + WritePrivateProfileString(szAppName,"ShowOtherFiles",string,ini_file); + wsprintf(string,"%d",dl_other_files); + WritePrivateProfileString(szAppName,"DLOtherFiles",string,ini_file); + wsprintf(string,"%d",dl_wa_files); + WritePrivateProfileString(szAppName,"DLWaFiles",string,ini_file); + + WritePrivateProfileString(szAppName,"mp3root",mp3root,ini_file); + WritePrivateProfileString(szAppName,"pagetitle",pagetitle,ini_file); + WritePrivateProfileString(szAppName,"filetypes",filetypes,ini_file); + WritePrivateProfileString(szAppName,"logfiledir",logfiledir,ini_file); + WritePrivateProfileString(szAppName,"playlistdir",playlistdir,ini_file); + +} + + + + +// -------------------------------------------------------------------------------- +// Open log in user's favourite text editor - Registry! Aaargh! +void ViewLog() +{ + /* + + 'log' files might not have an association, so open it with whatever + program opens text files. + + - enumerate keys until '.log' is found + - if it's not, look for '.txt' + - find filetype (eg. txtfile) + - enumerate keys until 'filetype' is found + - read filetype\open\command + - if that goes arse over tit, just run 'notepad.exe <logfile>', but that's cheating. + + */ + + // Ah, sod it, let's just run notepad! + + + // Find log file, in winamp plugin directory (same dir as gen_httpsrv.dll) + char logfilepath[MAX_PATH], *p; + + if (lstrlen(logfiledir) == 0) + { + GetModuleFileName(plugin.hDllInstance,logfilepath,sizeof(logfilepath)); + p=logfilepath+lstrlen(logfilepath); + while (p >= logfilepath && *p != '\\') p--; + if (++p >= logfilepath) *p = 0; + } + else + { + lstrcpy(logfilepath,logfiledir); + lstrcat(logfilepath,"\\"); + } + + char logfilecmd[MAX_PATH]; + //lstrcat(logfile,"gen_httpsrv_log.log); + wsprintf(logfilecmd,"notepad.exe %shttpsrv.log",logfilepath); + + WinExec(logfilecmd,SW_SHOWDEFAULT); + +} + + +BOOL CALLBACK NewConfigWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) +{ + return false; +} + +// -------------------------------------------------------------------------------- +// Entry point for new Config window, using Property Sheets instead of a single dialog. +void NewConfig() +{ + PROPSHEETPAGE psp[6]; + PROPSHEETHEADER psh; + + psp[0].dwSize = sizeof(PROPSHEETPAGE); + psp[0].dwFlags = PSP_USEICONID | PSP_USETITLE; + psp[0].hInstance = plugin.hDllInstance; + psp[0].pszTemplate = MAKEINTRESOURCE(IDD_ABOUT); + psp[0].pszIcon = MAKEINTRESOURCE(IDI_WINAMP); + psp[0].pfnDlgProc = ConfigAboutWndProc; + psp[0].pszTitle = "About WAWI"; + psp[0].lParam = 0; + psp[0].pfnCallback = NULL; + + psp[1].dwSize = sizeof(PROPSHEETPAGE); + psp[1].dwFlags = PSP_USEICONID | PSP_USETITLE; + psp[1].hInstance = plugin.hDllInstance; + psp[1].pszTemplate = MAKEINTRESOURCE(IDD_SERVER); + psp[1].pszIcon = MAKEINTRESOURCE(IDI_SERVER); + psp[1].pfnDlgProc = ConfigServerWndProc; + psp[1].pszTitle = "Server"; + psp[1].lParam = 0; + psp[1].pfnCallback = NULL; + + psp[2].dwSize = sizeof(PROPSHEETPAGE); + psp[2].dwFlags = PSP_USEICONID | PSP_USETITLE; + psp[2].hInstance = plugin.hDllInstance; + psp[2].pszTemplate = MAKEINTRESOURCE(IDD_USERS); + psp[2].pszIcon = MAKEINTRESOURCE(IDI_USERS); + psp[2].pfnDlgProc = ConfigUsersWndProc; + psp[2].pszTitle = "Users"; + psp[2].lParam = 0; + psp[2].pfnCallback = NULL; + + psp[3].dwSize = sizeof(PROPSHEETPAGE); + psp[3].dwFlags = PSP_USEICONID | PSP_USETITLE; + psp[3].hInstance = plugin.hDllInstance; + psp[3].pszTemplate = MAKEINTRESOURCE(IDD_WEBPAGE); + psp[3].pszIcon = MAKEINTRESOURCE(IDI_WEBPAGE); + psp[3].pfnDlgProc = ConfigWebPageWndProc; + psp[3].pszTitle = "Web Page"; + psp[3].lParam = 0; + psp[3].pfnCallback = NULL; + + psp[4].dwSize = sizeof(PROPSHEETPAGE); + psp[4].dwFlags = PSP_USEICONID | PSP_USETITLE; + psp[4].hInstance = plugin.hDllInstance; + psp[4].pszTemplate = MAKEINTRESOURCE(IDD_BROWSE); + psp[4].pszIcon = MAKEINTRESOURCE(IDI_BROWSE); + psp[4].pfnDlgProc = ConfigBrowseWndProc; + psp[4].pszTitle = "Music Collection"; + psp[4].lParam = 0; + psp[4].pfnCallback = NULL; + + psp[5].dwSize = sizeof(PROPSHEETPAGE); + psp[5].dwFlags = PSP_USEICONID | PSP_USETITLE; + psp[5].hInstance = plugin.hDllInstance; + psp[5].pszTemplate = MAKEINTRESOURCE(IDD_LOG); + psp[5].pszIcon = MAKEINTRESOURCE(IDI_LOG); + psp[5].pfnDlgProc = ConfigLogWndProc; + psp[5].pszTitle = "Log"; + psp[5].lParam = 0; + psp[5].pfnCallback = NULL; + + + psh.dwSize = sizeof(PROPSHEETHEADER); + psh.dwFlags = PSH_USEICONID | PSH_PROPSHEETPAGE; + psh.hwndParent = plugin.hwndParent; + psh.hInstance = plugin.hDllInstance; + psh.pszIcon = NULL; + psh.pszCaption = "Winamp Web Interface Config"; + psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE); + psh.nStartPage = 0; + psh.ppsp = (LPCPROPSHEETPAGE) &psp; + psh.pfnCallback = NULL; + + PropertySheet(&psh); + config_write(); + ConfigWnd = NULL; + return; +} \ No newline at end of file diff --git a/Wawi Source/Config_users.cpp b/Wawi Source/Config_users.cpp new file mode 100644 index 0000000..6af3c70 --- /dev/null +++ b/Wawi Source/Config_users.cpp @@ -0,0 +1,345 @@ +/* --- CONFIG_USERS.CPP --- +/ +/ Written by Phil Himsworth, 2001-2002. +/ +/*/ + +#include <windows.h> +#include "types.h" +#include "main.h" +#include "resource.h" +#include "plugin.h" + +extern winampGeneralPurposePlugin plugin; + +int securepassword; +int pass_debug; + +extern HWND UsersWnd; + +// -------------------------------------------------------------------------------- +// WindowProc for Config dialog +BOOL CALLBACK ConfigUsersWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) +{ + int nItem; + HWND hwndList; + + UsersWnd = hwndDlg; + + + char ini_file[MAX_PATH], *p; + hwndList = GetDlgItem(hwndDlg, IDC_USERS); + GetModuleFileName(plugin.hDllInstance,ini_file,sizeof(ini_file)); + p=ini_file+lstrlen(ini_file); + while (p >= ini_file && *p != '\\') p--; + if (++p >= ini_file) *p = 0; + lstrcat(ini_file,"gen_httpsrv.ini"); + + switch (uMsg) + { + case WM_INITDIALOG: + + UpdateUserList((char*)&ini_file, hwndList); + + PostMessage(hwndList,LB_SETCURSEL,0,0); + UpdateUserInfoBoxes(hwndDlg,hwndList,ini_file,0); + + break; + + + + + + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case IDC_USERS: + switch (HIWORD(wParam)) + { + case LBN_SELCHANGE: + hwndList = GetDlgItem(hwndDlg, IDC_USERS); + nItem = SendMessage(hwndList, LB_GETCURSEL, 0, 0); + UpdateUserInfoBoxes(hwndDlg,hwndList,ini_file,nItem); + + break; + } + + break; + case IDC_UPDATE: + UpdateDlgUser((char*)&ini_file, hwndDlg, hwndList); + UpdateUserList((char*)&ini_file, hwndList); + break; + + case IDC_DELETE: + DeleteDlgUser((char*)&ini_file, hwndDlg, hwndList); + UpdateUserList((char*)&ini_file, hwndList); + UpdateUserInfoBoxes(hwndDlg,hwndList,(char*)&ini_file,0); + break; + + } + break; + + } + return false; +} + +// -------------------------------------------------------------------------------- +// Enters use details into relevant boxes +void UpdateUserInfoBoxes(HWND hwndDlg, HWND hwndList, char * ini_file, int item) +{ + char userkey[30]; + char username[20]; + char password[40]; + int access; + + SendMessage(hwndList,LB_GETTEXT, item, (LPARAM)&username); + + SetDlgItemText(hwndDlg,IDC_USERNAME,username); + GetPrivateProfileString("Users",username,"password",(char*)&password,40,ini_file); + if (StrComp(username,"anon")) + SetDlgItemText(hwndDlg,IDC_PASSWORD,""); + else + SetDlgItemText(hwndDlg,IDC_PASSWORD,password); + + wsprintf(userkey, "#%s_access", username); + access = GetPrivateProfileInt("Users",userkey,AUTH_ANON,ini_file); + + DisplayDlgAccess(hwndDlg,access); + +} + +// -------------------------------------------------------------------------------- +// Marks check boxes according to user access levels +void DisplayDlgAccess(HWND hwndDlg, int access) +{ + if (access & AUTH_SERVER) + CheckDlgButton(hwndDlg,IDC_AUTH_SHUTDOWN,BST_CHECKED); + else + CheckDlgButton(hwndDlg,IDC_AUTH_SHUTDOWN,BST_UNCHECKED); + + if (access & AUTH_CONTROL) + CheckDlgButton(hwndDlg,IDC_AUTH_CONTROL,BST_CHECKED); + else + CheckDlgButton(hwndDlg,IDC_AUTH_CONTROL,BST_UNCHECKED); + + if (access & AUTH_CLEAR) + CheckDlgButton(hwndDlg,IDC_AUTH_CLEAR,BST_CHECKED); + else + CheckDlgButton(hwndDlg,IDC_AUTH_CLEAR,BST_UNCHECKED); + + if (access & AUTH_PLAYLIST) + CheckDlgButton(hwndDlg,IDC_AUTH_PLAYLIST,BST_CHECKED); + else + CheckDlgButton(hwndDlg,IDC_AUTH_PLAYLIST,BST_UNCHECKED); + + if (access & AUTH_DOWNLOAD) + CheckDlgButton(hwndDlg,IDC_AUTH_DOWNLOAD,BST_CHECKED); + else + CheckDlgButton(hwndDlg,IDC_AUTH_DOWNLOAD,BST_UNCHECKED); + + if (access & AUTH_BROWSE) + CheckDlgButton(hwndDlg,IDC_AUTH_BROWSE,BST_CHECKED); + else + CheckDlgButton(hwndDlg,IDC_AUTH_BROWSE,BST_UNCHECKED); +} + +// -------------------------------------------------------------------------------- +// Retrieves user access from check boxes +int GetDlgAccess(HWND hwndDlg) +{ + int access = 0; + if (IsDlgButtonChecked(hwndDlg,IDC_AUTH_BROWSE) == BST_CHECKED) + access += 1; + if (IsDlgButtonChecked(hwndDlg,IDC_AUTH_DOWNLOAD) == BST_CHECKED) + access += 2; + if (IsDlgButtonChecked(hwndDlg,IDC_AUTH_PLAYLIST) == BST_CHECKED) + access += 4; + if (IsDlgButtonChecked(hwndDlg,IDC_AUTH_CLEAR) == BST_CHECKED) + access += 8; + if (IsDlgButtonChecked(hwndDlg,IDC_AUTH_CONTROL) == BST_CHECKED) + access += 16; + if (IsDlgButtonChecked(hwndDlg,IDC_AUTH_SERVER) == BST_CHECKED) + access += 32; + + return access; +} + +// -------------------------------------------------------------------------------- +// Builds a list of usernames from the ini file +user * RetrieveUsers(user * users, char * ini_file) +{ + bool anon = false; + int userslen, uptr, tptr; + char t_users[10000]; + + userslen = GetPrivateProfileSection("Users",(char*)t_users,10000,ini_file); + uptr = 0; + tptr = 0; + + while(uptr < userslen) // until we're done + { + // weedle through to the end, replacing the equals sign as we go. + tptr = uptr; + //MessageBox(NULL,users+uptr,"start of section",MB_OK | MB_TOPMOST); + while(t_users[tptr] != 0) + { + if (t_users[tptr] == '=') // equals - make it a null + t_users[tptr] = 0; + tptr++; + } + if (StrComp("anon",t_users+uptr)) + anon = true; + user * newuser = new user; + lstrcpy(newuser->name,t_users+uptr); + newuser->next = users; + users = newuser; + + tptr++; // move to char after null + //if (users[tptr] == 0) // if it's null too, that's the lot; end + // break; + if (t_users[tptr] == '#') // if it's a hash, it's the access level - skip it + { + while(t_users[tptr] != 0) + tptr++; + tptr++; + // if (users[tptr] == 0) // if that's null it's the end + // break; + } + + + uptr = tptr; // move on to next + } + + if (!anon) // anonymous user has not been added; add it + { + user * anonuser = new user; + lstrcpy(anonuser->name,"anon"); + anonuser->next = users; + users = anonuser; + } + + return users; +} + + +// -------------------------------------------------------------------------------- +// Enters usernames into the dialog box list +void UpdateUserList(char * ini_file, HWND hwndList) +{ + + SendMessage(hwndList, LB_RESETCONTENT, 0, 0); + + user * users = NULL; + users = RetrieveUsers(users, ini_file); // fill list 'users' with usernames + user * current = users; // pointer to start of list + + while(current != NULL) + { + SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM) (current->name)); // add it + current = current->next; + delete users; + users = current; + } +} + + + +// -------------------------------------------------------------------------------- +// Updates user information in the ini file +void UpdateDlgUser(char * ini_file, HWND hwndDlg, HWND hwndList) +{ + + char username[20]; + char password[40]; + + int access = GetDlgAccess(hwndDlg); + + GetDlgItemText(hwndDlg,IDC_USERNAME,(char*)&username,20); + GetDlgItemText(hwndDlg,IDC_PASSWORD,(char*)&password,40); + + if (StrComp(password,"password")) + { + MessageBox(hwndDlg,"Choosing a slightly better password than 'password' provides better security.","WAWI User Config",MB_OK | MB_ICONINFORMATION); + return; + } + + UpdateUser(ini_file,username,password,access); +} + +// -------------------------------------------------------------------------------- +// Adds/updates user with passed-in information +void UpdateUser(char * ini_file,char * username, char * password, int access) +{ + + char debugtemp[100]; + char oldmd5password[40]; + char md5password[40]; + char userkey[30]; + char str_access[5]; + + wsprintf(str_access,"%d",access); + + if (pass_debug == 1) + { + wsprintf(debugtemp,"User: %s\nPassword: %s\nAccess: %d",username,password,access); + MessageBox(NULL,debugtemp,"WAWI Password Debug",MB_OK | MB_TOPMOST); + } + + wsprintf(userkey,"#%s_access",username); + if (securepassword == 1) + { + MD5(password,(char*)&md5password,40); + if (pass_debug == 1) + { + wsprintf(debugtemp,"MD5 encoded: %s",md5password); + MessageBox(NULL,debugtemp,"WAWI Password Debug",MB_OK | MB_TOPMOST); + } + } + else + { + ToBase64(password,(char*)&md5password); + if (pass_debug == 1) + { + wsprintf(debugtemp,"Base64 encoded: %s",md5password); + MessageBox(NULL,debugtemp,"WAWI Password Debug",MB_OK | MB_TOPMOST); + } + } + + GetPrivateProfileString("Users",username,"password",(char*)&oldmd5password,40,ini_file); + if (pass_debug == 1) + { + wsprintf(debugtemp,"Previous password (or 'password' if none):\n%s",oldmd5password); + MessageBox(NULL,debugtemp,"WAWI Password Debug",MB_OK | MB_TOPMOST); + } + + if (!StrComp(password,oldmd5password)) + { + WritePrivateProfileString("Users",username,md5password,ini_file); + if (pass_debug == 1) + { + wsprintf(debugtemp,"Written to gen_httpsrv.ini - \nUser: %s\nPassword: %s",username,md5password); + MessageBox(NULL,debugtemp,"WAWI Password Debug",MB_OK | MB_TOPMOST); + } + } + WritePrivateProfileString("Users",userkey,str_access,ini_file); +} + +// -------------------------------------------------------------------------------- +// Deletes a user from the user dialog +void DeleteDlgUser(char * ini_file, HWND hwndDlg, HWND hwndList) +{ + char username[20]; + + GetDlgItemText(hwndDlg,IDC_USERNAME,(char*)&username,20); + DeleteUser(ini_file,username); +} + +// -------------------------------------------------------------------------------- +// Deletes a user +void DeleteUser(char * ini_file, char * username) +{ + char userkey[30]; + wsprintf(userkey,"#%s_access",username); + WritePrivateProfileString("Users",username,NULL,ini_file); + WritePrivateProfileString("Users",userkey,NULL,ini_file); +} diff --git a/Wawi Source/DeletePlaylistEntry.cpp b/Wawi Source/DeletePlaylistEntry.cpp new file mode 100644 index 0000000..1e9d13c --- /dev/null +++ b/Wawi Source/DeletePlaylistEntry.cpp @@ -0,0 +1,231 @@ +/* --- DELETEPLAYLISTENTRY.CPP --- +/ +/ Written by Phil Himsworth, 2001-2002. +/ +/*/ + +#include <windows.h> + +#include "types.h" +#include "main.h" +#include "html.h" +#include "plugin.h" +#include "wamessage.h" + +// -------------------------------------------------------------------------------- +// Delete a playlist entry by manipulating the playlist file. +// No longer used; replaced by DeletePlaylistEntry2 (below) which is much shorter and easier! +int DeletePlaylistEntry(int track) +{ + // Get current position and save playlist to winamp.m3u + int plcount = SendMessage(WAwnd(),WM_USER,0,WAU_PLCOUNT); + int plpos = SendMessage(WAwnd(),WM_USER,0,WAU_PLSAVE); + + + // Find winamp.m3u; it's in the same dir as exe of current process. + DWORD wapid = GetWindowThreadProcessId(WAwnd(),NULL); + HMODULE hMod = (HMODULE)OpenProcess(PROCESS_ALL_ACCESS,false,wapid); + + char playlistfile[MAX_PATH], *p; + GetModuleFileName(hMod,playlistfile,sizeof(playlistfile)); + CloseHandle(hMod); + + // Make \path\winamp.exe into \path\winamp.m3u + p=playlistfile+lstrlen(playlistfile); + while (p >= playlistfile && *p != '\\') p--; + if (++p >= playlistfile) *p = 0; + lstrcat(playlistfile,"winamp.m3u"); + + + /* Right then, that's the playlist file extracted and found. + - read playlist into memory - linked list + - scan through list writing back to playlist file + - don't write back track to delete + - reload playlist. As easy as that... + */ + + + HANDLE hFile = CreateFile( playlistfile, + GENERIC_READ, + FILE_SHARE_READ, + NULL, + OPEN_EXISTING, + FILE_FLAG_SEQUENTIAL_SCAN, + NULL); + + if (hFile == INVALID_HANDLE_VALUE) + return DPE_NOREAD; + + // Put entire file into a char array + DWORD dwSize = GetFileSize(hFile, NULL); + char * cplaylist = new char[dwSize]; + DWORD read; + ReadFile(hFile,cplaylist,dwSize,&read,NULL); + CloseHandle(hFile); + + // playlist file is now in cplaylist; scan through and put in a 'playlist' structure + + + char * chptr = cplaylist; + char temp[MAX_PATH]; + + playlistitem * startitem = NULL; + playlistitem * currentitem = startitem; + + for (int i=1;i<=plcount;i++) + { + + playlistitem * newitem = new playlistitem; + newitem->next = NULL; + newitem->number = i; + + // skip '#EXTINF:' + chptr = GetDelimitedString(chptr,':',temp,MAX_PATH); + chptr++; + + // get time + chptr = GetDelimitedString(chptr,',',newitem->time,10); + chptr++; + // get title + chptr = GetDelimitedString(chptr,'\r',newitem->name,MAX_PATH); + chptr++; + chptr++; + + // get path + chptr = GetDelimitedString(chptr,'\r',newitem->path,MAX_PATH); + + if (startitem == NULL) + { + startitem = newitem; + currentitem = newitem; + } + else + { + currentitem->next = newitem; + currentitem = newitem; + } + } + + // hopefully the list is complete here. + + // Open winamp.m3u for writing + hFile = CreateFile( playlistfile, + GENERIC_WRITE, + 0, + NULL, + CREATE_ALWAYS, + FILE_FLAG_SEQUENTIAL_SCAN, + NULL); + + if (hFile == INVALID_HANDLE_VALUE) + { + FreePlaylist(startitem); + return DPE_NOWRITE; + } + + // Write it back into cplaylist. It'll be shorter, obviously, so it'll fit + wsprintf(cplaylist,"#EXTM3U\r\n"); + currentitem = startitem; + while(currentitem != NULL) + { + if (currentitem->number != track) + { + wsprintf(temp,"#EXTINF:%s,%s\r\n%s\r\n",currentitem->time,currentitem->name,currentitem->path); + lstrcat(cplaylist,temp); + } + currentitem = currentitem->next; + } + + // Write playlist to file + DWORD written; + WriteFile(hFile,cplaylist,lstrlen(cplaylist),&written,NULL); + CloseHandle(hFile); + delete cplaylist; + + // free memory of linked list + FreePlaylist(startitem); + + // clear current playlist and reload it + SendMessage(WAwnd(),WM_USER,0,WAU_CLEARPLIST); + + int pathlen = lstrlen(playlistfile); + COPYDATASTRUCT cds; + cds.dwData = IPC_PLAYFILE; + cds.lpData = (void *)&playlistfile; + cds.cbData = pathlen+1; + SendMessage(WAwnd(),WM_COPYDATA,(WPARAM)NULL,(LPARAM)&cds); + + + // return to old position in list + if (plpos >= track) + plpos--; + SendMessage(WAwnd(),WM_USER,plpos,WAU_SETPLPOS); + + return DPE_OK; + +} + +// -------------------------------------------------------------------------------- +// Delete linked list after it's done with +void FreePlaylist(playlistitem * startitem) +{ + playlistitem * current = startitem; + + while(current != NULL) + { + startitem = current->next; + delete current; + current = startitem; + } +} + +// -------------------------------------------------------------------------------- +// Delete using Playlist window messages +int DeletePlaylistEntry2(connection * conn, int track) +{ + HWND PLwnd = FindWindow("Winamp PE",NULL); + if (!PLwnd) + { + LPVOID lpMsgBuf; + FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + GetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language + (LPTSTR) &lpMsgBuf, + 0, + NULL + ); + // Process any inserts in lpMsgBuf. + // ... + // Display the string. + MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION ); + // Free the buffer. + LocalFree( lpMsgBuf ); + } + + + SendMessage(PLwnd,WM_USER,104,track); + + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + OpenHtmlHeader(conn); + char refreshto[MAX_PATH]; + if (!GetArgValue(conn,"refresh",refreshto,10)) + wsprintf(refreshto,"/list"); + + RefreshHeader(conn,refreshto); + Style(conn); + CloseHeader(conn); + OpenPageBody(conn); + prints(conn,"<p>Track"); + printsi(conn,track); + prints(conn," deleted</p>"); + + return ST_CLOSEBODY; + +} \ No newline at end of file diff --git a/Wawi Source/HTTPServer.exe b/Wawi Source/HTTPServer.exe new file mode 100644 index 0000000000000000000000000000000000000000..2973c575790d248c9c2a628fda3f119a835ed62c GIT binary patch literal 93759 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 literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/OK.gif b/Wawi Source/Images/OK.gif new file mode 100644 index 0000000000000000000000000000000000000000..43a7b510dc368e96b814d345bf9f7163c23858c7 GIT binary patch literal 956 zcmW+#ONh^L5TBK_7Y??KP##IkN;r8WpZ4ItHjj%fhduna)aKx%$Z03LWlv%yR?=kI zgv0J0M3j+7-WMwuX_VJdF2Z4aX6N?%HuHJS{2IG=ZQ0u2A#L*Ex3D0hA|~P@A(B#0 zfGETu4hcx2nxLX8rs680l3HUhQ4=$9lQ2muAh@WDxwuQXqzj=Dq9GRIArX=xBtwd( zSc<1aO3u=ws9*(ys1{HVO92BM2p|DU<dZ5);fheCf}+`^1~a%J3~8VZj;X^O?g&RZ zXpBG_uz&|5kO5jHv?eU!iAdzEd6H=vRWB1t)q<keq9QP1IK&n{RGF%)hH7%oloI)5 zrfwRhY03~OnoZ{FuHl-ljFmPxW}zM$p&81cX^cRY>Zy^M6+I1bfT=TMCd&MnR{12Z zl}mb}1L~!^VzS~PDluv|%!1rz?&e{hMi>sUg%4HXp6=Wq^P)cEcX)(nI5)}!so2<& z9_d*-W>Qqf6W|Be%VpMr87K`HY9=bqS~;{VnHEZvp*jMFPLpPZ8<uHx7VxrdUQFTS zsYBsn7=%S}M`T8w4hn`tr6#h<Kl;SWpZV{n*|lb~X=V|zVnq{Z(k0YZ{+Zh%(k|<T zRsV#vj!9?hvV$%9XsESq-Jb5r&pz~fRnO(_sjE+h7A&7La(8mPaauMndGLMeOJit$ z<5J(fGl!m^+OYHF$B~T_U875md>XznJ<zx?=kS%=YYz;(y3jSaX7!7iA8&2niG^Pm zpYNC%-8R;<<3#(dnTx%>^Y;EdI`QTv?oao<I%oUubiVsGymZm^$7lOLoP53I*!a_j PgPVT6?>^rDOlA9jd06#i literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/Title Graphic/Wawi.jpg b/Wawi Source/Images/Title Graphic/Wawi.jpg new file mode 100644 index 0000000000000000000000000000000000000000..39dc4536ee684a47b656a65ff8d1ea91806b20a4 GIT binary patch literal 11694 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 JelK+}{9io_uU-HE literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/about.gif b/Wawi Source/Images/about.gif new file mode 100644 index 0000000000000000000000000000000000000000..17a54d03d1aa0a2c405f8c6e00787492a4920278 GIT binary patch literal 947 zcmX9-Pw3cl7=9+|mvB;2`t=SM{eFk-AX_Uvv}{vTazlDoD`mLYVQx=t$V{{1Af@-G zj4fqK%1*D=92{IIIk=FN949%wo=-l9Z{I%O_kI4o@AuG=$M!vRY!jRK2mc=e0tNvD z5kd@nM}h(e2_%t1&MFikL4yK{D4_-oG|@s2#$dz<Ghs+Dpuj{Rf)R?CFb^42a3T@O zNJUP_{0u2HQHWxcq9z*Aj8^o7l@4PRV;Wec1)0w@Ms%~k`HJg^9444#iaC@$`C8Pl zz#>bmVS`P!*h9NFz=$(x>+XgUlYtCoC}Yxj7?Mg(CNi0+%t<*XQz<oB$YPeVCL7tz zR`#S5wWv{!Gs04|0<|AF4m-Co`&lxVP}jjUMs$Pge5G|p1r=3NjT&mIr5<@oHtO1$ z@`&uxg_sIdutF76o|~<^n^TEOR;qGJC^-_NP8F(HrK+h$HLF!U<;god^Ut)$?&M64 z=|BfN)G_T{aGX}e=|m?x)j2J+xMXU&(8VrwO*gvPt?p@WlLul?Gi#N=We97Tyf<DE zZ@}6wa=GLhlIP**o$OjVaaq?gZ=beg#TIH!rZ>7l-S1Mr?f&;>th2oy>z}~JJJ_{x z&%T}d=JdwxcRYJ|&(5_sZo6gk+~F^dJ@WdkTQ9tO>cVel-i}?z|2n*P=i9gLzVFfP z{TF_J{JjV6dicdR_g=hye)Gt8U;cdM;`blye&yF2`|rH}=tsMcUfsTW<BumkIr#p) zznnUG>B$eDI{n;hmmfTF{qml#Z~FM`-<N*;^!W9&2Veba>(Kd^uRVS4z)zn&bLGVI Of4;PJ^79{r1OEXash&Up literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/admin.gif b/Wawi Source/Images/admin.gif new file mode 100644 index 0000000000000000000000000000000000000000..2d2436a599c404bde51f0177167afda275644c63 GIT binary patch literal 943 zcmW+#OURaG5IsW0pIDnp67pxTjL@PC1jEgdAT^7MiZ)53SVW7U9|Dn}Q)wX>5xP+b z#@cjQRCIwB#Y9MpF0=^RC$vbHE~3qJ-k#ORyff!E^X=XLz^?latzs2_+<^Zd0Re*m zf(Ri7u92X?K>|snkh3(3kf1>UMU+s32AXK02V*c|gqbiT7*Jp$5WxsVOqhoZDmamd zWTYY|WPXMenkYmuN>LMyXhth~!b*oRiZKnW(t^xq8Y6nx-(2GIL=F>7GQ}Lqo?I3+ zEU?HDYuI3uE%wmv4KU(N+PbHq#AG0Y8OoS+9)_fnlZi}bDsxiK$y7>B7P6S7tjR_; zvz0yRL@jER<BYH<S^~8nI1W3vG5c9$E<)W0(-_eM?sG}Y8x>SkNi}Mysg`==E!n7h zXUZ$GOE+RFP{9gSOnGm%?rBaXDp{$@DWT*@j5<}QVwI|<8r7^;^^`a7@XSBcUb~Ys zIi>?0>`=$FZ^3a|5vLQK>{REp(BdLf(}gZ}scX8?&2Dv1`<lEEdzx8J30w?eIVRtY zPsA6n+!wjH<gz61!_hn0<><u4x)$^HX-igYq1I%2qZ`!oZuPG_;kW!3uyO|LR&LpK zzP^8B<+|&i-gnRWAKuz<_3Ej8pC8)u=KAd~oH_dL#p7?sx+9lwUb}eV)YhF_9@@0F z<-qAXo;h~qpB;bRe`3eM!%u8_{Kz9GZ+i9L+rIhixnIuS`0~d0KKk;*-#*y>&f!=7 z{{8t!KR)o<?HA5n+4k7$+rEA9tCg27J$3fUAK%~l$;P{W{rcYB>z_Tj_To>UKD_6z S&BwmD`{(bjz4e-_u=_t*Uz#%j literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/black.gif b/Wawi Source/Images/black.gif new file mode 100644 index 0000000000000000000000000000000000000000..185d95b110bd7e43940311158ceb8dffe9906667 GIT binary patch literal 799 scmZ?wbhEHbWMp7u_|5<V|3|@S2#nMa&;jKDP+nl*U}0cnVPUWa01~bJK>z>% literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/browse.gif b/Wawi Source/Images/browse.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e327dd1f5813885a5b029be8a89fe97bc6d7277 GIT binary patch literal 940 zcmX9-IjdM@5IqkR9zg{w74$I%0!Ck9glI4*CqbVH3ZjC7SWLhL1Ph-8v^y9V5@O-f zn8wLMDp3@Fz^GWcbQTs?DI{Pk5)sDp;a6NP-<>(z%zf<m&Y=fRY+(z3<NrfIz#xDi zLWqIyNKoJ)fh1DMS%o4bXiz{ACDfpSCR*sh7>pQUCJYG%6qpD^FhUU%<{^U$P9!23 zsmKYLpCN@N3Q>$w)I=ki(Tbk1(qW8ZOarU5AoH2Vh;H^bUvV9g!vvE|F^94zUyB+R zSY(McY_Q1|duaCt7;z?T-Q7@PGLXRxWlTB`LsH4fL?$zpIVtC4Dy1e1S<F(_WFwo| z%ARzh7B$LoMp%kgp!NgDVdpkxKTGBk>N=Rlh;DG5ue8pnprT5uQA16&)FV&HMqN8o z9+6$T5L1B)R;XgibF+1Kb1G5EN>xq?B}Zb^sX`U2R5jJ8X0@uPJb8y_{+agJot()r z9q3?(I;On~j?;=bo#<qzI;VvemrP9;y4a<z=|(rZ)jjQP@<8lqW~~yq3}G#k_r@#Y z4Osg{E|*+G@;n^9lU++EF6&z6?bDX5*g~zz^hP(R`(5g{JFi`bb+*@I{S(+cjg8IQ z51p@XPi@|K(+kJ$J^%gtH(bAU_Sjb^j=Z<$o>xD4^TR9ed=MKi{(0-}l^@RTJGl3W z+jjRp{_$P6e6fA?>6ee5JMhrMKkfhMk6%8$|M>I&Uc33?lNXMj+<D~OH?KT%`O#B5 zcl`6l)u%2!``LXzKls<a=f1rAt+#*u?d0d*UCzU2UOK(|+K-nGzJB4|JqNab|9WEs GhyMdZvzE*N literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/frames_one.bmp b/Wawi Source/Images/frames_one.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a300200d7701fcea74c27edf7392e8fc3777ed2c GIT binary patch literal 3038 zcmeHHZ3@CL42>WtDD)8i@dWzc|K6#`@fbUaSE=tMb1OE&HitTB)_f5A^3t?;x!!l8 za$1WV5uKq2=t{PlzirexCW>H5jOJhwLZdWIgCCMENr@2@A5%0{>ICWp7CV73O=KD@ zRGdG!KbXrN5&{h)gr3aSr*e=c*OGBIz7Rz4`jl2}$;Hf!d_KWT7JT^YP&1192_bfj zjNIOp{shNfQHYLb9aPFT+noWTz#+&%#k*7W!Lo6D)%LXE`a@;W@6X3u<iaho8M9f3 e7J7YhYx}|ZFUZHSrjZpyZNkI7+neXVj(Y%^?t|3; literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/frames_one_lg.bmp b/Wawi Source/Images/frames_one_lg.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2ab4591a155d19fbe4b7ed8410258697af2bb808 GIT binary patch literal 5446 zcmeHJL5{*O4D?DII3U<P>>u_4D;~gs8y8;Gr}e<Ux)U2rky4L>5+qhho774s<FT8x zIh>B)qGi7l`GIvt{YCwdwf290iCnf;wZof11h))>J<!5L9b_Cw3`}~<G$jiaSL#Yl zFFgZ218<vwUG*YTopRSX>*loQv*)u`2Ew(p(E?ZLX{{Q>`O7(po~7Ysof`MG(cm`^ z?GhpSU&|Q?Aw$bLH3&(8+_G>r2xAm`BTlL)4+vw=PocfdIMdk#-tCA&Wl+GJ%$VsE z3TVbjJ(mHRy`wT26m2>!s|ubkfG5vq{*H7hrQNN!FRN#0n{m<%l>t;|*%XTIoHRv6 z0Gdzx8Tlau=aF<I2@B;6XXgk10VhJxFTZ{MvGHy1yO9qZy+Q0PIL)In-@jM(C%kFS fOAU0+qcB(ub_X%cM=Nr=>mtLI6wQjk@5A{AEBgn` literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/frames_three.bmp b/Wawi Source/Images/frames_three.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0807cb3486e27a5b5cbf3863acc30b7010721cf7 GIT binary patch literal 3038 zcmeHHOAf*y5FHZ}`!V4VZajhR-FqjF<1u;?uTtL|XhTyJWK(PU=**B|9y37Uc7L{_ zxa>vF=v^Tv$WAKtKMral%8K9<Yn_2c7h<LBIt=vsN#C;vL8FUm!?pw44y<+uOc}&r z#m3N#DrY9oQ9AmhbCx7BLZWj>Rfghx(JIo;73FgWuR6W1Ap+~;6>;Z1I5X@L`@&jL z+E{W%nLgOx23@M3B|&DQ68r}52pB4w=rWeC(>+mo8Z3s-RRl37Lw$qMhi=A<^BCrm z%?RER<GqUw{eREnD^Uvkh7yWM(=;tn*R@QB7&Zc|Nz;LVHyI3hvwXvppYsh--`E$w C{B>yn literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/frames_three_lg.bmp b/Wawi Source/Images/frames_three_lg.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d4f3604c31d55f63c5cf23be5e2073c8d85cbf8f GIT binary patch literal 5446 zcmeHIOH#uy3{_`Xq|hN{!5ugN!vVTr$EGLB(X!~h!jlwSlaFv5dpaprZ2AB6EZfTI z>+_XFJ|2kPP&*^PBk!n^{^JYL<yo_IIMom#QPXGvjVf|OZQEj?lSEy|HDr9;#i~g0 zK=Ht4Jy0hXqFTHGU_z3n6w-_{mkINSq4H#^Oj-+OyIA_Ai`Q8T@?ciUB@a)_GjU^u zXPn>WR&C0k9GS2YE>iIJ!IA(9w=2P<m~#gh*`LCHL(};%^`yj}e*t2GJV4yJ>+b?h zNqnh1L&M$K?QEE~*~O#6bMY#B!QEgUMCw{gXw>Yj>s_+u<iND-&5Yf_8DR_ZKHVeL z=MViy9I*E;uo?mSIG}$R8}=rcdbVoXCg5&C;50Wsq*5?Lyc9m?fBTbvx_N{{FVR@T u+9Twtmpues5~wHiZ*F5W?OBBh<5Q`(JmLwG6DgRdKQYzbqcQ!3>+9e0xa`LO literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/frames_two.bmp b/Wawi Source/Images/frames_two.bmp new file mode 100644 index 0000000000000000000000000000000000000000..97c2b5afc2c9084094a14b21d69260b5eedd83dc GIT binary patch literal 3038 zcmeHG%MHRX41GvQ&=x5}aA5+tb7!ZF!x)`}RmyuVL5*slEeAfT6WginXD3d2JY6an z?U%rgs{?sUUSMtZ^U9PXBEX3lTSdtwIijv>IvSg38m-72GD*xdcVO<o&vqb8BTR#Z z8Rs|dhx)>&9)jMxe-huCAmdQ1<EMLReFvw#vVfFMIVe>dOaQ|<3^)WiD7kam@4#(H zK|;#e<!A0M--vEQ(=H~-JcM6fKkX(BW*PL^Bgb?LlgIP6DIR-zB{IX`<LuX&DEJJ~ jWuPp}N>mgDGMB>cL{v7+(ZOZTF0NNErF>p5MUBx{F?@J5 literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/frames_two_lg.bmp b/Wawi Source/Images/frames_two_lg.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d2f859dcd2c64b41a53d360b02d0d367fa3f1f4c GIT binary patch literal 5446 zcmeHIOA^8$42?4`{Eg_sJ9q%c1GsSK#uIV0F1%NLBpn8ZjxdF)RZ>XPl)i)q4VT;X zKrH7u(Gk`i{e(WF1^ah<qQ_P`JFL<~Xr#5=pkbnGYMKTwT5i;~#zMzsTt-!?3{(at z%YZ5_M8zRh#VpHd<+Jixih)V(B~zy{aVgjN47gx|{Kc60sd)&KT6Z}?<YaO;z`(Q0 zt~+lf1J2EEt0AzXVS1~U|G;_X!*~ckgSlZ*O776GyqSg%(YcR-8Kx2SMDvUygah7; ziEvz{rBvf5mH*TlVS=6Kb)F1si+~Lgf&B=k%tu1MPQY@JILwYuF)C&XOX*|&n@>4* z$Izzq5``MER*-ckO9)(CsC%@ZS%@Z{EKCINYhC0ZPbAsXlJj&2mYVxuO!vcl`w4=V B@x}lE literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/list_delete.gif b/Wawi Source/Images/list_delete.gif new file mode 100644 index 0000000000000000000000000000000000000000..51ade2d973ecdcb112bcd9323de276a8b63c1e9d GIT binary patch literal 842 zcmX9-J?_q75F8%`e}zP=Sy4#D0f=UzAQFumtVZn!qd`O?Q7AV~;0PNo;ua!`F;6_z zoBi$1*Y5l5`O}AwUR~e<zw!SO5MUHgL<wc2MuGy32AXK0eHukbkTJjzBaE@Y5-Y6X zfDsn#3M5!i!BwbYm8x9fA&V-y8r7^;wM*e=NhQ~yhBc~jEoxb-T33{sWtBsNsEnZS zg(ip@&bO3!o=CI7CR=P%@szSCbHE`-9CN`XS6nmh17OkaSkE-na2LARr7m~!2qe{X zH@exaZnu(CsMK-~df1~L_oA1*>UAg4h_c$r2uINgG=7jc;ylLU=g2%l(}&OmF$3vK zN#|Ju4K>nO3oW(MTG>*Jrq`aVC@#|oPhpBvn(}0Cv7Tvq8q=KCv_}{vlAwA9Gn~<k zXEDoJ&3dx=gcp8$v-Ttxa(D|{+|rgew~#oah~CCFx3%pRRy;E09qe#NJKn`EceU%y zHDw|3WS>(4k0G36%H8BdaslVQ$m5b{N!drDPqOFe#A98@e0;`I6h~+@g+Ay3&3sz( z>&~C6mk^2v$UFZDT)PLq{rl|uFTS~U<Ko4KH@}{|zj^!qr-z@v{djll`s*)WU*7%s K@yeCUc>E9LjcgzQ literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/list_play.gif b/Wawi Source/Images/list_play.gif new file mode 100644 index 0000000000000000000000000000000000000000..e32a6bbea4d071e4f7410c9f20d4cea83b528068 GIT binary patch literal 843 zcmX9-t*Vw`5FFtk$^olbWW{2z2nvd25L9el!fG|y4FiI~U^Z^_GWK{AW-r6yI1fJQ zW8dBR+x=d@dG++!yGvZ+7yds20*nHRD4~qhNKl~BKoc#rPooG4G6oo8gfSLaVudvv zFv5aefdmUGxC&LQQk5$_WKl&|qng#Kb}9TUspJ~eutqhmMJ;Pp>xxpdta4}&l@S!a z&;&8V`IZvT6KOWsWQ%Poo>CTN4mjk9V=lPlifhJw04&-a>zRfc?m`#4)a6bdfux%5 zMmM|F?N)LMm0IpW4|~+(Ui7k8z3wC$QC2${;V3$R#t#xloX1%F9GORG`Vg8RW*~hj z={#$op+*{Op`}(@D_e@u^xBgZ#bp}dDNJ!nQ=aTC)-z2{W17>N_6Vay5>(G%hBKP+ zEM_^YSx+{f@WO9z)}G`-4sT(LTiWvG77}L^(c9SOwzj>(ibtlrgB|W@$Gh0&u6Dh- zrYt0$>~l)sF@$qWxtp9wF5ui3d0g@=Df>wDN%kC_c&zJ~kIz_&;s}kV&<8!BnNMqe z-TQNK4WW35yz`&HjR)|}3vjMJUtHdO{Qd3kpI>g>dGYDSqxUbr-n{+y!;g>mufE-V Ja{U6&{{f|^YEl3I literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/main.gif b/Wawi Source/Images/main.gif new file mode 100644 index 0000000000000000000000000000000000000000..5884aaa2763181f88287296476b6ea8c2a389fbf GIT binary patch literal 950 zcmX9-O^A?X5PsG+*fP7Q5t7>o?nOJ;sg($xLUcF8y@*~s%tD9=UY1RyE(3}YDHeI? zU@*IfgoUD{E-T7NDJXPEJQ<z@PaXveg6VnjJ$!t;-^}wj^BtJqKl|R|G^X(!FAjkK z8U`3)0c+@v1Ose1;DiUfM_~{Vh(-cQWFQ*_6j6a{w7`fCbekYSLm1i&W;6@4Ht~?g zFt$0&X&&ZnA%0qfMO(s>mSNdeu%cC1wMl8yI;=$lsgxk`iAIQO);C>ooFJPHI_W`g zhCJyy7|jHe%wRSPEV6>tlzRbmu-j!_-3Uj!!HsU=)~-AR$#Awi-02?f?V+4R6&~#g zPkM%Dd%=rd;nl80C91<)8DS_IfyxgQhn&lp{0x~xsOlgZA*w-jx{7f+5|NCI$c{o3 zqavz9Q<72DcBe)pmnuZ3A&qH~)~UJ4y1LovNN0MacLp*PiBLNenaqsL&O#QmBCAuA zS9s#@E{$Eui5y*qGL}VImv%vMN)fvp<t&f#u0REc%;-u~vN9^W3RSF%sxEDl1|m=0 zW0k;R2xFPFH(C*Gz}PQxxa1g;=Ar17>{z<supYy_e9Dp(OQ<x7Ug!c<ze@GC<KIb) z^UipTe*#nAVq)s8*_FI?c52h>$L98|{QkvjFHc{X`(^RN^RMncdHKvYkI!ASiBF!s zx%Bw<g>Cak_DwCV&R^cL`R3s-|62U`yNz$(|Mj1DR}Wp8{`|>*uRNGpSpDeiot^8; zSLarCe!p$|!=Kj{a^c70H+F4ZJNVQ5Zx1K0KRa>s>df6APVN2l)Ss75JUacy`WrKk WzMlR2+6P}PKfQPJvzIpD{r>^J)1E5; literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/next.gif b/Wawi Source/Images/next.gif new file mode 100644 index 0000000000000000000000000000000000000000..123c4119ecacd9bf17032095af2bfae4f28d6d1a GIT binary patch literal 952 zcmX9-O^A?X5Pnt?7R|t0f^3txf+(S&xD>>ri0#5&>d;AH7Cc3CSTG_`2K)(OB}6@h zg=31K;9=bk5gkTE^yEPnk6uJU@+eBD@p<t*e0;p$%=0(%eKmJzX5YdTrtlW;4}kz0 z1{h%hYv_&y18g|pga^DwVGt3BMgmD>AR7e~QGsf-z=#fXn;=0$7}^YGGz+sf@sP$a zwmHmc9_DQ!ep-Y@Tf&l-VcAx&qE%S6NomtMtVIK<lpyhmMu=+GH(ha@Ae#<4=|OLX zJn1?Z%><LoU^WXZvVzr=djWK?+htwd2uHiYjc(!At~><EaJD<#=^pOwp`1h&9_<NF zdWL6v!HZtu)viP(s>53uVJI4b$`2HWoXeQ}44Ffy>L3~+szG(Sig7v;k&KMUjzScp zBC11El2O%mr$!`~DnzFtjcJkAskzCzy4mSSXL_V}1~L?hP&*Tu%#6&=LKd?kt5cI# zc;fFaja|u!99@PomPJ{Yc0qAU5xX4aERXW8Km~`)=t@+wGAg?YRji7tE^U(rB2V38 zmB3*LW0|x!S`lr)*e`Op<QS6Xq3D(DSi0b_9>ctR%90dIs5FUQ=mJ&0O7-^X{~utS zo#Qe72~1wX#N_6gt9ke2<c5z9&+fW<@0SnPPA$zYFYG_FZpU{Qe>(r{)H$0t`s(Aw zXZM$;_imZrw7BK|uj?0X9X$K>joHf^kG$AAx3X>S%C2K;ZvVab{Lz)&pS=0^?CPK2 z{C?oVm#6<(z4rLp%pWKAeE$0R!&~z!KmRqevi-sJZFdi>-E?XC+vOjAd%E=Bv7JZm W{P^<C_m`i%TD^I^Kie>gFWvzn*r4$M literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/pause.gif b/Wawi Source/Images/pause.gif new file mode 100644 index 0000000000000000000000000000000000000000..92e69d2800d6c1fb11a56cc6c80bc668eee945c5 GIT binary patch literal 953 zcmX9--^+-16#o$Q_QrC_(%YFvX-mrF4XcmB-fc=LTZ%g5ijv-o<<40&7hWs!BNwZq zrS)!0iCUx_8E)LT@E5o+%i4ttxjH`Id@r7!zRx+IU*|kueZ6yf)4?fB;VnKK0s%A( zFv0@X&>aZ|*l@rJ4|tElAR-Wr1d_-=HVP=B0@Y}N5gq6@L4t-bv>D837G`bYA&p^d zbC}aS%-cfzv<Qo~ge5J*vaMi6tFUU5(x!D-iw06DLE;mQ5Y?=2y5cxNHXU@*gWe2z z(seMJ2_~7rY!+B#1*<9d0_b43%euM|j&_3^-NLP1c?go>Y<IZRJ>1(vIf*Jf+7q7i z4A1t07rnx(U5QFmhqp4qP&5LSA1DqvmofPnGKWyrK{P^CgX(k@<8&k<85xlsg(yZv zREMS{qpIyrjYuw4h)zQq(;}@?bCY#-v(u5z^hoavWGE7$b|x~J8JV4hEM`SkrzWrP z#NS;SyOI+*x(sD3i?S~5g5s1Sb~(yf9_3wu3J#gkm8fK8RCX1rSQS-W+9nM|p1Q{> zfx{5SGHGwLBHDnlU*vGfF(l1H(JR@pbirXghI#pvB`KCrX%fBA1*(3P>g|(vi!jdT z<1zjTOkBo-iIvmW^1-Qzr628|S%2-}nI(&-=4Ngl-1gJtXGbocIRE1GIa_e}_43&l zkLFfyT(xV(?4iFetvYaM`<-QLo?iX*=-qqs8-9EA^VXAlZm+%d^2wDgXD4@T-ZTH? z*XbWOpL_M@)wA4vX3h0GU;O)g-v9dU`sDL}zQ3{W>Nh*Sy}Wwn&tqRcp8I3(x&voV X{6G84?-%}ic>nmxg+F|}3|rm<_P3yk literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/play.gif b/Wawi Source/Images/play.gif new file mode 100644 index 0000000000000000000000000000000000000000..8305f45b7f4c61ef5fb4fd3fe603587e8492ad98 GIT binary patch literal 945 zcmX9-O{h?15IsV{L#l;sGU7D}1!aUA$*AB2X%-f^s5S~?1VUJgCqhJv14R!)gG2}y z(fFWv+g`M8D%uD_yY>myqFsv!g6VwpEiRYu&YZuQ`@)MSjy-v96Px%O{~rPZ1_1;S zLJWLIf&vE#B#}bSDik3>g93^up#}{!(LxW#V8jSBVMs8bz(gQ|5sH{F4;fT&A`!_* zMNY{43@J2Gh+>qYCK}O<R`i6G4r3H!8d#+Tna?yvbhE$titC6RCYWT3Ig~y5TGX(> zB1^1cgH5*BL%TP?h%;&H?uHVRfedCSW72sTl1fe{GMTB&NjWD|DK%NhVwSQd8`;cO z_M{WFs8NnH!cw#XwI4VRJGU|WSu&SU*TFPKbc5@BrFBLH6;)D=8fvPg9(hVO>e`v| zi0smZm<m*|LKRb<o2|Q>Q;AAes&YywITE8z6{=XJs;Ndbt5rSa$vZsr&$P$x<V=p~ zKnFY2G3{M&oL0o?L?=7dIW4rfWNNz5#V&PCH@exa?rCq62Vze%Yn8xd2y2<VH(n8M zz}hczx#Sv>=i%s`>{>c;S=TaepSEPh7HUnVH@ZRH?^3@#^v@kw=kfJe{{%KZ!M=?L zj@_v5KiIhYo--$p-1u?(t~)m`pZxmVb06(L{MNO1KfV3omDu;@pZ9Iu{^|0=M-QDk zxOM2n)kn`hapvH?Umm~y$lLFo+Boq0E8CA<`uP1nE}nmW=b7{SkH7TSZ>PU{@QWY* zy?*VD(>u?8_S&tdF75tYXTRIJa`V82U-mY)cfP&<)eA50z4Oi0qc`_<U*F}eUq3&5 HB=Gcq!kw7n literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/playlist.gif b/Wawi Source/Images/playlist.gif new file mode 100644 index 0000000000000000000000000000000000000000..a81b5d7a990d8038bf02e22d873b9b8e1790c11b GIT binary patch literal 936 zcmX9-O{<V)5IsV{Ei76@D9L5IaG}ga5~0!NgkTCS!YC*LN02@)L?JHPb)u||5{0-B zin#_so1%X(73~sn5&ZzAmCGQ5U^)*yi<g(@ojG4K?+Yi7A3btr6Px%O{~rPZ1_1;S zLJWLIf&vE#B#}bSDik3>g93^up#}{!(LxW#V8jSBVMs8bz(gQ|5sH{F4;fT&A`!_* zMNY{43@J2Gh+>qYCK}O<R`i6G4r3H!8d#+Tna?yvbhE$titC6RCYWT3Ig~y5TGX(> zB1^1cgH5*BL%TP?h%;&H?uHVRfedCSW72sTl1fe{GMTB&NjWD|DK%NhVwSQd8`;cO z_M{WFs8NnH!cw#XwI4VRJGU|WSu&SU*TFPKbc5@BrFBLH6;)D=8fvPg9(hVO>e`v| zi0smZm<m*|LKRb<o2|Q>Q;AAes&YywITE8z6{=XJs;Ndbt5rSa$vZsr&$P$x<V=p~ zKnFY2G3{M&oL0o?L?=7dIW4rfWNNz5#V&PCH@exa?rCq62Vze%Yn8xd2y2<VH(n8M zz}hczx#Sv>=i%s`>{>c;S=TaepSEPh7HUnVH@ZRH?^3@#_Rl?7=g@kre*zm9uxI1I z(cSv#<BbO%eB;DZyT5$4_ukEmCw@Hh{HOOnxpVo0FK&HuDfXPbv+vxkUoUPyv-RTs zb6dwhf9UYFv#;IUzJB%T?Vr!@yZPt!ub=(!^?&c4x_#`+V;4^S_1(j7-uUXikG9_3 zIluGrw_Cg4Uw-G6Ctm&G^m_;I9K7=OOIIJiapkxDkG%EAH}C(xbLr8;f#?1M2)~rY literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/popup.gif b/Wawi Source/Images/popup.gif new file mode 100644 index 0000000000000000000000000000000000000000..9204373d9bcf08bdd7bca2167051aafad138586a GIT binary patch literal 956 zcmX9-O^A?X5Pk%MHMcHZLSmf`1)+q5py=fZWOw~5+&UC_7{M-{tUyf!hg>bxJuGYo zMPYVH)MH_XZj-h_L3ry>q6ZINq+5s~jL%E&;p5}|W}d&9Z)W%O_HBozFoh@h{}2eE zVSo`9u!inPFu;ZbPI$n36b2E2Xe5wC2C`8=5f!LL3ykPMw+Rw7grUt~Mzb($6Ax(& zW1GXA=3(9z;-^Jev?VNQ8J2AYD_VtBo0K-K!&)?uN(mC5XoRR{ebW`k39{*+lOFVD z$dj&v(M&MO3}&;yA}d%;xfehOyIt1Rjc~LZ+~^i=?aD)t3}?H;o$le@9?D5n;nAM( zq-S`x7rf{dUhPU$qB^{l5r(1>sQf^2$hnNk&yYEUst%$Nq8e1Es~D#v5y{Ai>?lMr zDxx|xB^gz1cWOj(sX}xb(wG)$otm4htDBvUbf!moXCOn72(>ej$;`;?EMze&vN|<+ zg(v>*(%6-p$kAmeV_B4SX%`fy6tT-u&hjYl3RG~&jIKl_E2FZjP{pdK>e4o8AoA2b zRtX%2FqTPsqZQExjQt{qOO7FF9*SPcj-?9@>oLsBrz}aagi4d>g)UI_t5k2VKV6G) zHjl^nCopjdYbIXXzMMawnRw~tgR@(f?|eP^!qmmt?+?9u?!`?<mQE}_oL{gthabQC z`NP$V>o@MWHT%xBJ@apW^24d8i*Kx6w$IM*dh5X9-B(}v;J?XrOV{7Oy5Yj_&%U{} zGWXrS)4$H|*!t+huV$|O_4v1?H}B@hd#Bg_{qLu9OZ!(({&I6}^G83v_u%%zPhb4= c$K~lqE8pJy^Txd^Umibs_QbKH_X9hh1K9<nt^fc4 literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/prev.gif b/Wawi Source/Images/prev.gif new file mode 100644 index 0000000000000000000000000000000000000000..175d003e667ec80974240649d9cc59e3cc23ba5c GIT binary patch literal 951 zcmX9-U&N4i6n^4cKB+FUDCTn-WvyZ&MdH~_D;6v2B8^j4X;;a7c9lb^mM=E@?xvhl zGN05gitbKQHg?hGyIB9OB9>i7BF>(leiyIT?>*=Fch398&h1+^ADqGz-r)Tq5J1BK zBP?JI-H~8`4F{a?fcGd2A_CD!Ac+iQqktkRP>mKC(SdFgBxndjo574`Vb&%d(ip}z zhdIr|ye-5}i?C=*Skf{q+X_~+3ad6LZCZ!5XdsmmBtFpyQO)|MD~=On(?KUa=*^HP zT?eC?V3HZkW`RXku$po&fDU%Mtg9R0Xg9dgE!^6bhaefwc85FN!@WI}lc>U@J>f~u z@N6%5(JQ>#m8e8@cq=0eMI%u8f#Q&J8IzwOa|l%(L?c8ss7_ZgPDdh=krCNZh+<Sk zb!bX5s@m?<h~!d*=rp7;Ez&wQH(6IVJ00mvkMzz!h9VJaXCjlCk=a?uVpe2zYVrzC z{N1IoD>;#)%TUI$DC^QLC{8J2m!q8JQQj4(;E)+ziAq*RWmln!RZ-QYZPGyGse7yv zI1FJdllDd{q74}PMGlu7L()7Hy^<YE7aZ1On3qpkl41#!CeaIBpz2qt-d4Sxz&Pv2 zWBe1CoW+94kG5RSd#5IsEIqK}v&;9-F8*L@X2)*_KR>f*-M6#f|McSY1zYgVe=APB zcrdei)5l+~JaJ{`%<``vzWe9+nm^8cvis2d-AC8{ytsM8rFV~izW)2!?c4tT@cjJC zJ=b=vUAFD~>tlcASHB+G`)YP>{_50*>Ai2io7?x}z8i}U|1kaO(_2R#Pfz@^@#wQV V$NoL}eE;p6Pv%ZuSU7>L{{vO=q4)p* literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/randomoff.gif b/Wawi Source/Images/randomoff.gif new file mode 100644 index 0000000000000000000000000000000000000000..e761402f2a4a37fe5adb45decc7e184ccb92c3ca GIT binary patch literal 948 zcmX9-OQ@H15IqLLrEWosA|Wn=QbZ5YNU+?T2p>@*v@LVAR<%f_BwC$Fx&+>ZuSHTY zmLWwD(JI<ZM2j{NK`YxSt)xW~LYwJ)^jrOzZ|1ya{`;QWyX&bVYgofA{Qn3D7z7YR z2r+Pt1O*NfNFs%trBQ?g4GJitgc>x^L<>C_gApUlgdxFz0uzA<Mkr#!JY-P8i9{qL z6*(dEGo;W&A&OConrK8bTG10$I*d__X<(HWWIodv(Zl}c5|<}(m|&7A=1}(JvZ!H! zMV45@2AgcLhjwp(5oglYJq;x$0~yRv#-#HwB$b>@WHM8klX6a`Qfji0#Vln_HnN$m z>`5nTQKKAZghkO3sQtik*tw0_&mwaX>OPpph#qjCOIqHjprT5uQA16&)FW@nM%_D8 zUXfk85mSK*R;Xgid$V;<b1G5EN>xq?B}Zb^sX`U2R5jJ8X0@uPym^Ob{+agLot()r z9q3?(I;MRKj?;=bo#<qzI;Vve7nzzabg@fa(~WL+t9#nl<b~MN%yLTLVhGDI`EGn7 zzJTSv$i*d>C3zo?-pMXUCoa~tn72<`vSJIhCes_;pq_WDe?11j<-dTHkFaUwfnAsC zhxb?Ry8Gq*+b{jNzIyxG>HXgvdFF#V9)11%J7=z)+K5fB-MIh6wVzHuxO2-3n@?<c z{@lZdUwrGkv!5L}v+elFuRgr_(7}s4@BM4_>Azn+_{qNYcb~j??2F$n?|JXGe>PvZ z{_~Y*FWk51%Wog~{p&*;CqMu9o;QB^_=&Bb9{B#)<1bx#^Xe-bSAX4l==_euf4+U^ Sxyyg7>*mqb8{3Z(*!>@;E}m@w literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/randomon.gif b/Wawi Source/Images/randomon.gif new file mode 100644 index 0000000000000000000000000000000000000000..858b4e634e1fa9c882e0682eb61868c0dee575ac GIT binary patch literal 963 zcmX9-O^DZJ5PpIcHddEfBm{Mti(nAZx`B!a18S}-bm-8@V59=ElSF~S!h;_ux(7cl z9z2XD__2Z-?0qac#g>pKp<4uc3F@Gorst*i^k;rE&)3ZV;GvIp?LIn-S-isk&jA7r z1I%HBHB@tl6W$0Q96>~nMmk8akw7|<$VLI>D54rIFh>*JCP=t}hBkwlo6)RIJnrT+ zZwpws1ufbremBzCmaue7TDBFe+=^ChQrd1!YtcX|B}jat5u%3mO(h?X?(G2&_n=2R z<w<2a+Y_GdNze9zmwVBxUG4?Y^zM*#O@o0BLzss#tV4MS(iz?ni0}wTbWk~oiouRV zq(?HcqY&j$jOtLL64i`WMi`1lpz;I7A?GqCKSSmasy>KDh#F9zN*u45U^<h`W`X4_ zvYOhGjH<UgwIaDxBRUOfp2oCJ?M>D-?VW)P&tOI;kyIo??M!5PCNnz=S)RqLPHkS{ ziNCwFb|oirbQ#LLjAdQA1;r^v-W90u3RZLxMISQRm8kSeR(2Jtyoyy_x+X0|p1Q{= z!G|G?W76H|M05e;zTAgPA4}3c6upuiM@JvlIn2waEJ?A1N|We?E>O*@RlnYY-uN$I z@-E((+_LLtJ~=bFVfx6z2RDB_zkc29#Qw*(e!9fz9UoqJ{Q1FiGgGIwoP7KC!qx5X zzB5sC+ZNBh|JldO|9-!1?aKVo`!^naeP`{){QTb=U;cCZ>9sePX7)axIri&!hp$Yp zTU>qdY~_=c#ijeJw-#28Jh`}b{F|?ytsFSNW5dtCJ@{pH=ZWXbm*%$re)ZeGX1~1m k>BFa&mtLIyWApVtqs|>VzWn;p+z%I~w(k34(_7f{A5he%Y5)KL literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/repeatoff.gif b/Wawi Source/Images/repeatoff.gif new file mode 100644 index 0000000000000000000000000000000000000000..e158d64b03c717eb68b8834535af4ed7280fab5d GIT binary patch literal 946 zcmX9-Kd9Gr6g^79L(0Jr66A5QKLi?B@WOC8E%oA6LrX(JS7^u}2&r(X4rGd8gQyfl zaD5O#o5UO5)C~zLh~N<<E)Fgg(bCY+a64c8Oh4}T-t+I?-?Ps>bNs23t60UqxcdkQ z7z7YR2r+Pt1O*NfNFs%trBQ?g4GJitgc>x^L<>C_gApUlgdxFz0uzA<Mkr#!JY-P8 zi9{qL6*(dEGo;W&A&OConrK8bTG10$I*d__X<(HWWIodv(Zl}c5|<}(m|&7A=1}(J zvZ!H!MV45@2AgcLhjwp(5oglYJq;x$0~yRv#-#HwB$b>@WHM8klX6a`Qfji0#Vln_ zHnN$m>`5nTQKKAZghkO3sQtik*tw0_&mwaX>OPpph#qjCOIqHjprT5uQA16&)FW@n zM%_D8UXfk85mSK*R;Xgid$V;<b1G5EN>xq?B}Zb^sX`U2R5jJ8X0@uPym^Ob{+agL zot()r9q3?(I;MRKj?;=bo#<qzI;Vve7nzzabg@fa(~WL+t9#nl<b~MN%yLTLVhGDI z`EGn7zJTSv$i*d>C3zo?-pMXUCoa~tn72<`vSJIhCes_;pq_WDe;tM2@?XHpr`WY} z==inz?xU6a_Px4(?And<_wHG}xPJZQ)93acdGpGdOLxwG61!gi>w(jEzQ6eJ+TrI9 zo<6*B`O(*2dS`p*!5_~)`PK)&Zr}ga50}>7-@E6h>%af<@k1ZJcj(WZH(vabpRaD+ z{N~ip=hiRm|6==}KX$%8aCzsR6Kk6{KYQZw%@;PVKK9$zsRNI^``^})SFXIhv3d2@ S{=aX0`||DG`;Hz9ocJHqjh-+7 literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/repeaton.gif b/Wawi Source/Images/repeaton.gif new file mode 100644 index 0000000000000000000000000000000000000000..012821a2b368b5ba43d652c95e4ca3f7b54f0bd0 GIT binary patch literal 963 zcmX9-&x_Y(5PkxM6>F&=G0<fQj8X|VmrxRVz(_OMFv>hAjA)20{kSa&!icFG*`c5X zBVtSsvJj+rs>@Ua5eS}w`~!*v4}xF@IXy4Er!VuFd4A1&cf9=4maPY;FonDL{}BkF zVSo`9u!d?R7+}KzCp_Ri8iR;HG!jT61KB8`hzeAr1x9qB+XM+3!q8?gqgj}>iH9_X zvCUyl^Du7<@zWwK+7gzu49m8H6|KUmO-h^AVJ#X+r38sjG(yy{zNy6Vf^0hIqzAnj z@}zPwnh7SE!E6>-WCg1!_X6l(x68Vw5sr3)8{NXKU3mzS;cR!f(>>hVLpg~mJlYeU z^bF7Tf)~BQt6hmoREM`R!ca5<l^-Y$IhQf{88U}Z^+7a3)PVX_it#!Uk&KMUjzScp zBC11Ml2P?`r&c7FYDA|YjcJkAslCa%rrGI8XL_V}1~L?hP&*Tu%#6&=LKd?kt5cg- zc;fFatzF5999@PomPJ{YZb5NM5xX4aERXW8Km~`)=t@+wGAg?YRji7tE?turB2V4p zl)zyK<Ct_eIuTvKxG!?J<XDpSq3D(DIJ)4l9>ctR%90dIs5FUQ=mOQeTJ>uq^u~Vy z6PNJ7#F{PV^M{iY4^8ghx#|2*XC7QWwd}>qU;q4ZOg=laaQV=VQ;)7Zw&sIJF7Ev7 zsi#*htLb&SK78iD?Ad!))?NE_^TDMr&+R!f`_+p1``aGB`sek<7v|UBI(qx!^%bvv zbaVedGwWZ!@Z7n*+m1ap_vX^R&!71B#+|v>zL|aHi?!d+yz~2&ci&t3WW)U2Z{NND r*RO9}y8Fkj#p7??U%q?s$zM*Nn11{0-``IExUh2V_QR_m#`FIHy+Ne& literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/stop.gif b/Wawi Source/Images/stop.gif new file mode 100644 index 0000000000000000000000000000000000000000..dddb484d94102402d7d685e76419bc547a9b32ca GIT binary patch literal 946 zcmX9-%d3!e5IusyC8~8rT&BWRPZyFP!O5T$tVQ5Ti!mz77J)s8AUO0gE`}JoC@AJ$ zQZOiJQ`_kw1-VQ519H=%ZA7c-{OGs%`1pM@=QZ;^e)zHd51rV=CjP<yhk$@V06~Nh z1K*LLz(E2@q>!@;MM%(~fFeq$K?6;+(1S4;F~Uq35)3FX5r|-fA|}j31{Iu0L^4v5 z6EZ(T3QZKE7^SF*Ml_=pJz=H87{!<dR%t=zGmR15>~Fr}IwFS&CYfRmWlz2qH7u~m z5^LCClP&hp?hP>FOxn7;p~Pe$gBi-0bRLGJl9P!{W-4=1&dF3tO%}44rL4(DHnWvI z=|nARl;e!B6s<t*2adzeZOnd_%q7%yFpUx2;5uJvol!wWl~kjKnrf*>o|28acBVWc zyL2I@0u`)K#gyk}>+a@MqLP)WoDxco#Hdq+Dpsj#s!`2qRZn^H4$u5E?Xf#KlVdv2 z!47pydlww16>&Pz$xd}n3oS00nl5y)OI_2AZg#7C+S}xT*wf5fC2$$SS|;y}SHv5z z_KRFDxrXF<IC>|$mQGyOwanY6Em^UJT9fIGZcz8T)NgnGyBq7=yB_PGz{XkZ+PGu? zc76Zu#?7}JKlI@CkEd_CVe`zPZ%#b&!HxHvJpbmo>+gLOyPo^&)>GH7oY}MQt|Pad zdiJN&_wU^~zVYg%D`y{g`H%C5Kfd(j*50>&-+l78yN~QV{K~<rpIrO%sm~9*zxn*_ zM=wA6#nI26xw!TB<!fIb+kWSX4=?Qb<-!Z+wyu8q##cXod+@#=o<6qk#b0+`d;P78 KUw-!zao|5kFPx_U literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/stopslow.gif b/Wawi Source/Images/stopslow.gif new file mode 100644 index 0000000000000000000000000000000000000000..76a636cb2573bf46a0deea41eaf73c10158e4df8 GIT binary patch literal 961 zcmX9-&8yaB5Iut0CCr6}CB(~Qsh}>3sDw5r=);c-!9|clawOeI5tu@e$WUUND-pDa zOqjbVG!zPS;X=l=7Pl0+>OYVeF4`rUtLZ%StX}3fbG~NYH@CjA`Q<$mOz;5zKLP<X z3^2k1)=-TE18g|pga^DwV-OLDMgmD>AR7e~QGsf-z=#fXn;=0$7}^YGGz+sf@sP$a zwmHmc9_DQ!ep-Y@Tf&l-VcAx&qE%S6NomtMtVIK<lpyhmMu-~LH<dVEkWB}j^q@CG zo>UG-Gr=S?n9Tx<tY9_eUH~2Jc3Ian!qIMUqg%MOD-S_3ob3*Gx`%svC?`>cM|;AP zp5fVE@S<0EwJTAH>hM-Z7>Y)q@&m;o=Q1WgL*@{wK8Qw$8c?4~F<wU^l93VFQHWwx zM0IFOGOFJ0)QaR%jp#I_F)h+MwKrMUG&>#XOpo-=K!zd_YG)#onUUF9$YNGxb!zhp zPyF4bwJSN1qsvgnvMB4)EhtVYVwa<w<x$=hsNj$pU5QFoMrBu_id9k7rEAhc<f(g{ z5;zQD9Fy)wC!z}&_eBnu981zZ6upuiM;9E{W0;puS(0K2l_t>(U7(s*tA1^Q-uN$I z>U%7jdTR4rUiy6MvE{qAJU4gwi)BkDvs-@J^XjojH}3!X<F9TXJ#LHk{{7^E+rQ4P zeR0k7>H~lN^5vS>j~t%5@ys75R_vQU`0t8+*S=Z*^gCBpue>`w_tNu!Et~)7?pxnY zue|^4!yW6do_cL=^1-+F?kt>{Il1cAg%{r6`PuH@&pv+Q)`o?jw;exy=#%sNZ=O5! o_RN(ZpLp;3#ZNz+Su(ru!@HLcZeKUq_Rs10-*!E+bTMA}4}BY^Hvj+t literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/vol0.gif b/Wawi Source/Images/vol0.gif new file mode 100644 index 0000000000000000000000000000000000000000..032f2eac50fc7a57e9124505ea5ba5d1e8ea5bf2 GIT binary patch literal 833 zcmZ?wbhEHb<YACwxXu6qEiEnoN5N<ajK~ns0p$QtUSQx*V_@Wv@z}87U^9oXR?LYF e3lFyoD0|KE*tqCuw}f#V&w-7L-TN3B8LR<nn+nkY literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/vol1.gif b/Wawi Source/Images/vol1.gif new file mode 100644 index 0000000000000000000000000000000000000000..2dd49e4eb7d557fbcec56e2d103365d207339380 GIT binary patch literal 843 zcmZ?wbhEHb<YACwxXu6uEes6*8UBxg(GVDUA)o`w0ie9Vz+u3^$RXpgVZp&>4q>gB r6B`yDZWmDYn&Yu?(a~;3qpUkK0vnF^D>!$_cy3y9a<URL6N5DXN=6Kr literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/vol10.gif b/Wawi Source/Images/vol10.gif new file mode 100644 index 0000000000000000000000000000000000000000..fd18b150c8dcef08e299daf75b0e5b76291fd7d0 GIT binary patch literal 866 zcmZ?wbhEHb<YACwxXu6qEes6*foK$rhQP=R0Ub~d0ObV+4tEAd4jGRP3l27O2y5v` zELeEBosZRHjz^$FLzjep(vlU0i;wilIp&GXy!hB<l4xL&$<K*PU8igLADVO0DDCtt O6W?1kos&}?7_0%fgBINY literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/vol2.gif b/Wawi Source/Images/vol2.gif new file mode 100644 index 0000000000000000000000000000000000000000..90b0589e98b61ff68bedaf2396055289c5e497a7 GIT binary patch literal 853 zcmZ?wbhEHb<YACwxXu6uEes6*8UBxg(GVDUA)o`w0ie9Vz+uI}$RXpgVZp&>4q>gB z6B`yDZWmDYn&YuC=_rGQan>1)1&fdOGch&DXcj#=K1t1bk<ZRcDc+MbZP{2DtO3k} B54ivU literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/vol3.gif b/Wawi Source/Images/vol3.gif new file mode 100644 index 0000000000000000000000000000000000000000..43cb09c9d81168e0b31525670b880281c890d86a GIT binary patch literal 856 zcmZ?wbhEHb<YACwxXu6uEes6*8UBxg(GVDUA)o`w0ie9Vz+ub4$RXpgVZp&>4q>gB z6B`yDZWmDYn&T0e)X*(qoFsB!<6?J4M!PN^%}dHBC&~CP3W=Qb)MJWlY~7TXh6)VU E0N!H|n*aa+ literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/vol4.gif b/Wawi Source/Images/vol4.gif new file mode 100644 index 0000000000000000000000000000000000000000..9581c548c4d74ec46125002386eab0853ba99b29 GIT binary patch literal 845 zcmZ?wbhEHb<YACwxXu6qEiDZH{{zt|7!83D7Xmt<901A-3>-!bj2to^8x|aF<`CA3 uIk92k;dTLKuQ@La8jf~L=yKgSv2pS7eg)?)8P82iPEOVcZsXx#um%897!PRx literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/vol5.gif b/Wawi Source/Images/vol5.gif new file mode 100644 index 0000000000000000000000000000000000000000..a2cda11c3d0be8a4638fdc206dde9eea2ef79fc6 GIT binary patch literal 862 zcmZ?wbhEHb<YACwxXu6qEiDZH{{zt|7!83D7Xmt<901A-3>?l3j2to^8x|aF<`CA3 zIk92k;dTLKFCU2oi;i}Sv1Z&k5$Mp+r(oaoM5AcQu}NxyeIb&Up14huO`KFxIcb^u LY$J0v76xkojwluB literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/vol6.gif b/Wawi Source/Images/vol6.gif new file mode 100644 index 0000000000000000000000000000000000000000..f4c42757d4aed24d0a2acbee4ebc9fa4d339822f GIT binary patch literal 863 zcmZ?wbhEHb<YACwxXu6qEiDZH{{zt|7!83D7Xmt<901A-3>+>Dj2to^8x|aF<`CA3 zIk92k;dTLKJ|2gSi;i|N8D-tkP+&OTFK3^}qiLjka+131GM31o$6kH<?%PZ(Hz%K+ Mp_hM+hl9Zy07JJE)&Kwi literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/vol7.gif b/Wawi Source/Images/vol7.gif new file mode 100644 index 0000000000000000000000000000000000000000..99dea72efbe5ea864a6216a5752705536ba39326 GIT binary patch literal 864 zcmZ?wbhEHb<YACwxXu6qEiDZH{{zt|7!83D7Xmt<901A-3>>Zuj2to^8x|aF<`CA3 zIk92k;dUNok2xNNiyFEmjJY@#Y*aqpCu!fbN24gkbAq~U-;o(X$)_i1dmg)E@mcls NEQ{n@dn5!HtO1*37dHR^ literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/vol8.gif b/Wawi Source/Images/vol8.gif new file mode 100644 index 0000000000000000000000000000000000000000..de0e0ee66c2c3e2d4897b61f6f274d9e2cff0832 GIT binary patch literal 845 zcmZ?wbhEHb<YACwxXu6qEes6*foK$rhQP=R0Ub~d0ObV+4kHFe4jGRP3l27O2y4Zh s*s$<$Bcqbn9Ere&qumn5S$9rsTztG=!MRJubJLQOlQn|NcsLlW0b;rhdjJ3c literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/vol9.gif b/Wawi Source/Images/vol9.gif new file mode 100644 index 0000000000000000000000000000000000000000..ffd9b01c83efc2b9f97ea7219f9f7c58b40dcd07 GIT binary patch literal 866 zcmZ?wbhEHb<YACwxXu6qEes6*foK$rhQP=R0Ub~d0ObV+4tEAd4jGRP3l27O2y4Zh zxRB7$E}-lr;;?a%D<h*`)|nL-m5%p`*f)vXocP3Tf~ap?$V<UgkLePLn|w4kFFQR` OKmV3XXRw0<gEauF-W6{E literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/volume-all.bmp b/Wawi Source/Images/volume-all.bmp new file mode 100644 index 0000000000000000000000000000000000000000..923da179cd9b5122f6c7b87235585fa96a94a45b GIT binary patch literal 13614 zcmeI2F>b>^3<Q}ExK5SYm8&EVNS{CH6@HN)<xXJ~;6PS;3xfd9S%D{z#`-|*h!$-4 z>-+Ly$MNasv#+bKH(xLI>Swe2yV>pZw~iNnPdgJ^nRwrAKDMoexQlmP`j`jkN-<2> zQUPaDa~SWnF5Y$NBYFdK&0)fp3e6#PcXaWtOCNCdqJVO`PTa*i^G6&Na8`$adU!@e zFt5Wx?c9c;F$aZ(5<_lLKsj9}UY4PgnU67(IMMgR=n-}QTirqR5yuSXb)!Y?yyhHI zz@6cIKyFb$IbA3I2Mj6T5fRMmuuwaTVMgrcQ2{v*0fmJUi(zI+Rg}|pVlkwsWwB$S zV$38=DBxn4vD8%*7D_CJb=30C)WnKmHgCmB3|FL<d!~j~pQYKnC9C-B7|ge_|FJCT zU6-aE3l)&_5cswuhe;PZp1%(Y3nhMj@48%}W1#|$-w<@ULiLdxaM}YAOwv15baB8L Y&PSJ~)rTCA19CtP$N@PZ2Oe?Y2Q9~7^Z)<= literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/wa.ico b/Wawi Source/Images/wa.ico new file mode 100644 index 0000000000000000000000000000000000000000..f11456cec0723a0d8837c511a58b8a9beab4ddbc GIT binary patch literal 1078 zcmb7DJ&W5w5Pd!c<U^1Zq>p_~a2ZIE0~hj7GNcIM3JKB%a;;I3`w0R!X9i-06e)8* z;Yyc+7%YFB=iX>7#~cSCW6#d)o3}Hwt6iXjGxYm0OcrOr8`?Pb^FarA82|%fed>tX z!3&N+M(*>HF~~@kdBc$|%Ce-jfHr@qnn&f&ARGQAkteKLUR0RpbbJ6JF+jB?oabU; zJrdR;R_RD^xfB*ZB{V>r!A(SpQ^Gd)DGmhZW(5A0&}vJ-QZxiwCo`YIn$!x|3Um4< zomL`q5uajAkaO9JrLY7RpH03AQxr{$7FXShOo~H(aDmCSKLeg(GqrOtVFQqPF3yLW zbB<))oKs7vA`+U34cu(?grImrSVil+tzad_h}I_=tTlH+Xlk#I3qoJ(+MAP6HPzqy zx&C_S>5q-mav5ql2=qSg*uiNHq&py?_BJfB1i}Rn-0@o8Fwe+an;UL%<0TJVx6hF3 z2#MaHr*~|6(G7L^I?zq>S$FAA-RmE_=P|WUZSQ$W|9Q#4t4+<k;Yjzt?s*U+<h~G0 z*&8jcZd2PRLb+_7Ls#Uz0qK=YzbeA|9i6mtwSD6x!)o|Z<dQqBhjMEPv>r~)I{hGT vJ@Co{86pF^)cAV}d`Z}PkLuVnzeve<p7Fi6V!mPbj8(KX=erAF{|R^m^tDg< literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/winamp.ico b/Wawi Source/Images/winamp.ico new file mode 100644 index 0000000000000000000000000000000000000000..3f19ac6ecc0422033a48426d58c88f54c17e80e4 GIT binary patch literal 318 zcmZvYy$ZrG6opTz(1JrU>8Ngwf`dYbzLMagbVwdR@L?QUxFC5HAEBEW#CUG2n>RT> z{ZdLOka1aSp|j3_nI@%VNoAPOfiU<#^8h!zAA`<{5CT&V(y)<|Hi}D;+IMn`qG!)r zxPeONl7gw6hSy4wodVZLdrc_fR^;Y-6NOWIJS*lNFtL(OKbm6GYMOME!wBXh@R)80 kO3L0HaH)Cq1!Z{Wg38(XAAX}<*@I_2GxGVh0^Vof11e@r^Z)<= literal 0 HcmV?d00001 diff --git a/Wawi Source/Images/world.gif b/Wawi Source/Images/world.gif new file mode 100644 index 0000000000000000000000000000000000000000..19a73b0402639eac6a0b0fe322eb8206dd61680d GIT binary patch literal 954 zcmX9-zpK`D6n<`MUem<5krgJ#MF}dR8gA(D6jZ)jHZ=sE3k?Q>wOugkDWpN=t}YD+ z><@5rDo#Y)rdp!f`UOn|(Ga<Ke7^LVUe5QN=hr#!YpYi`U)(x^Blr>jKLP><0R$03 z3|u2YfrA8+NFirw6d^%_0*WZ11`RaPLJ!7Z#0WECNHCzlL?D6@ikL7D8B}m05y?nJ zPRRTWDKt@tVw9pL8qtha^n{fTV-#Z=SfvG-&ooB#u)n#)<%t|7m}H7Mls&mDYFJ>A zCDyRPCR^;G-5X%UnY49JLy5^i1~Zf~={yWcB_|V^%v9#2oRg`Pnk-~7OIeeRY-THa z(urEsD90ILQM3eVKX4p&Ze#Yd$XtZF52i7q2i)h9mNzP>sFG^bP*W}S$Xl{e_s*18 zWS4HlRG@+ts+jWLY~9nGN>s8^l~Y2=kr;KVP{k@$O*N`nt?DUn-r<>lroDD2XL3vj zI@qC(Y2Sk5v?5L?I@zhtX`#hMrlt#B>{8csqnq98p7u3)A@(%0oD#Sg!g5T$8=r_T zV7V`Hami&#-iM=ivdhtli*+sL?bDX5*g~zz^hP(R=iTaGC+_TB1AfO-@LT>9SigbY z1IN~H#`TZZ_kXdywrBs&hx;}jc<aB9U-|0N&vEh)-@EVNBZr?q{_whfyY|G!nNPmo zJd8c}A3XKvPv;)m-97sBV=r8}^YR~8u5Ntr{^eiaIJI->(A(dB`ue*U&fPqF<GJlO z|9<DCW2^JWzuvxe;mgnP_`i>y{^!Z>Zf$<Eb8(f8t6LAA-22N9e_dPKT047jb^957 OetC6w-}Pq$r|$v(S(VfP literal 0 HcmV?d00001 diff --git a/Wawi Source/Log.ico b/Wawi Source/Log.ico new file mode 100644 index 0000000000000000000000000000000000000000..f6cab08ef4b6a6a34405d68fb11a9648c8e36863 GIT binary patch literal 318 zcmah^F%H8Z3_PR`bb_gK$NaD(jCmGYzR@RmW2xlafg(jpq}sl-eOMTPK+ictwglj% zOh|bX0S_|J2H#Ny7^rn7GE1VOwZ;P<0e4jdU6SZ(X42xS5X@A=%`GCPZrz!m#k`#Q j^szqrL+3o_ka*kenz>j{_!Z!r*z@oI5ID1Kdi%r<!bL#7 literal 0 HcmV?d00001 diff --git a/Wawi Source/Operations.txt b/Wawi Source/Operations.txt new file mode 100644 index 0000000..922dd0c --- /dev/null +++ b/Wawi Source/Operations.txt @@ -0,0 +1,51 @@ +Winamp Control + +/play[?nnn] Plays current track if no argument is given, or plays + the track at playlist position nnn. Also resumes playback + if Winamp is paused. +/prev Previous Track +/next Next Track +/pause Pause / Resume +/stop Stop +/stopslow Stops with fadeout +/vol?nn Sets the volume. <nn> is a number between 0 and 10 where + 0 is mute and 10 is full volume. + +Playlist control + +/clear Clears playlist +/url?l&<url> Loads a HTTP location at <url> into the playlist +/url?p&<url> Loads a HTTP location at <url> into the playlist and plays it. +/sct?xxxxxxxxx.url Loads a URL shortcut file + + +Other pages + +/list Returns current playlist +/img?nnn Image number nnn +/top Graphic link bar +/browse?\path\ Browse music collection at "%mp3_root_dir%\path\" +/about Returns a little 'about' page +/main Main page, with title and current track information + + +Unlinked + +/smalltitle Returns the artist and title of the playing track. No HTML + formatting; just the HTTP header and a line of text. +/title Returns a HTML page of the track information - artist, title, + state of playback (playing, paused, stopped), track time. + Automatically refreshes. +/login Brings up a username & password box every time; can be used + to log out. + + +Still in development - they might work, they might not... + +/shutdown Turns off the computer +/dl?\path\file Download a file at "%mp3_root_dir%\path\file" + + +Anything else returns the frameset to load the top link bar and the main page. + + diff --git a/Wawi Source/Resource.rc b/Wawi Source/Resource.rc new file mode 100644 index 0000000..aca4ff0 --- /dev/null +++ b/Wawi Source/Resource.rc @@ -0,0 +1,411 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// IMAGE +// + +IDR_DIRECTORY IMAGE DISCARDABLE "dir.gif" +IDR_WAFILE IMAGE DISCARDABLE "wafile.gif" +IDR_PLAYLIST IMAGE DISCARDABLE "playlist.gif" +IDR_FILE IMAGE DISCARDABLE "file.gif" +IDR_IMG_ABOUT IMAGE DISCARDABLE "Images\\about.gif" +IDR_IMG_STOP IMAGE DISCARDABLE "Images\\stop.gif" +IDR_IMG_MAIN IMAGE DISCARDABLE "Images\\main.gif" +IDR_IMG_NEXT IMAGE DISCARDABLE "Images\\next.gif" +IDR_IMG_PAUSE IMAGE DISCARDABLE "Images\\pause.gif" +IDR_IMG_PLAY IMAGE DISCARDABLE "Images\\play.gif" +IDR_IMG_PLAYLIST IMAGE DISCARDABLE "Images\\playlist.gif" +IDR_IMG_PREV IMAGE DISCARDABLE "Images\\prev.gif" +IDR_IMG_BROWSE IMAGE DISCARDABLE "Images\\browse.gif" +IDR_IMG_BLACK IMAGE DISCARDABLE "Images\\black.gif" +IDR_VOL_09 IMAGE DISCARDABLE "Images\\vol9.gif" +IDR_VOL_10 IMAGE DISCARDABLE "Images\\vol10.gif" +IDR_VOL_02 IMAGE DISCARDABLE "Images\\vol2.gif" +IDR_VOL_03 IMAGE DISCARDABLE "Images\\vol3.gif" +IDR_VOL_04 IMAGE DISCARDABLE "Images\\vol4.gif" +IDR_VOL_05 IMAGE DISCARDABLE "Images\\vol5.gif" +IDR_VOL_06 IMAGE DISCARDABLE "Images\\vol6.gif" +IDR_VOL_07 IMAGE DISCARDABLE "Images\\vol7.gif" +IDR_VOL_08 IMAGE DISCARDABLE "Images\\vol8.gif" +IDR_VOL_01 IMAGE DISCARDABLE "Images\\vol1.gif" +IDR_VOL_00 IMAGE DISCARDABLE "Images\\vol0.gif" +IDR_IMG_STOPSLOW IMAGE DISCARDABLE "Images\\stopslow.gif" +IDR_ICO_WINAMP IMAGE DISCARDABLE "Images\\wa.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_USERS DIALOGEX 0, 0, 220, 201 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Manage Users" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + LISTBOX IDC_USERS,23,39,173,54,LBS_SORT | LBS_NOINTEGRALHEIGHT | + NOT WS_BORDER | WS_VSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + EDITTEXT IDC_USERNAME,66,100,130,12,ES_AUTOHSCROLL | NOT + WS_BORDER,WS_EX_STATICEDGE + EDITTEXT IDC_PASSWORD,66,119,130,12,ES_PASSWORD | ES_AUTOHSCROLL | + NOT WS_BORDER,WS_EX_STATICEDGE + RTEXT "User",IDC_STATIC,27,102,31,10 + RTEXT "Password",IDC_STATIC,26,121,32,10 + PUSHBUTTON "Add/Update",IDC_UPDATE,150,146,46,15 + CONTROL "Server",IDC_AUTH_SERVER,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,23,147,47,10 + CONTROL "Play",IDC_AUTH_CONTROL,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,23,158,48,10 + CONTROL "Add files",IDC_AUTH_PLAYLIST,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,88,147,50,10 + CONTROL "Download",IDC_AUTH_DOWNLOAD,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,88,158,48,10 + CONTROL "Browse",IDC_AUTH_BROWSE,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,88,169,50,10 + PUSHBUTTON "Delete",IDC_DELETE,150,162,46,15 + LTEXT "Select a user and update their permissions using the boxes below.", + IDC_STATIC,15,19,187,18 + CONTROL "Remove Files",IDC_AUTH_CLEAR,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,23,169,59,10 + GROUPBOX "User Management",IDC_STATIC,7,7,206,187 +END + +IDD_SERVER DIALOGEX 0, 0, 220, 201 +STYLE WS_CHILD | WS_CAPTION | WS_SYSMENU +CAPTION "WAWI Config : Server Settings" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + GROUPBOX "Network Settings",IDC_STATIC,7,7,206,92 + RTEXT "Port:",IDC_STATIC,61,66,16,8 + EDITTEXT IDC_PORT_EDIT,83,65,30,12,ES_AUTOHSCROLL | ES_NUMBER | + NOT WS_BORDER,WS_EX_STATICEDGE + CONTROL "Hide error message if an error occurs",IDC_HIDE_ERROR, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,26,81,140,10 + LTEXT "Change the port the server runs on. The default is 80; however if you run another web server you probably want to change it.", + IDC_STATIC,13,19,184,26 + LTEXT "Winamp must be restarted before a change will take effect.", + IDC_STATIC,13,49,193,12 + GROUPBOX "Password Storage",IDC_STATIC,7,105,206,75 + CONTROL "Secure Passwords",IDC_SECUREPASSWORD,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,26,148,75,11 + PUSHBUTTON "Err... what?",IDC_SECUREPASSWORDHELP,153,118,51,17 + CONTROL "Debug Mode",IDC_PASS_DEBUG,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,141,148,58,11 + LTEXT "Warning! Changing between Secure and Insecure passwords will require entering all passwords again.", + IDC_STATIC,13,118,131,26 + LTEXT "Click 'Ok' before editing users if you change these.", + IDC_STATIC,13,164,194,10 +END + +IDD_WEBPAGE DIALOGEX 0, 0, 220, 201 +STYLE WS_CHILD | WS_CAPTION | WS_SYSMENU +CAPTION "WAWI Config : Web Page Settings" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + GROUPBOX "Frames",IDC_STATIC,7,7,206,75 + LTEXT "Change how many frames Wawi uses depending on your browser.", + IDC_STATIC,13,19,184,18 + EDITTEXT IDC_PAGETITLE,20,112,150,12,ES_AUTOHSCROLL | NOT + WS_BORDER,WS_EX_STATICEDGE + PUSHBUTTON "?",IDC_PAGETITLEHELP,174,113,12,12 + LTEXT "Web Page Title",IDC_STATIC,20,101,139,8 + CONTROL "No Frames",IDC_NOFRAMES,"Button",BS_AUTORADIOBUTTON | + WS_GROUP,23,42,60,10 + CONTROL "Two Frames",IDC_TWOFRAMES,"Button",BS_AUTORADIOBUTTON, + 23,52,60,10 + CONTROL "Three Frames",IDC_THREEFRAMES,"Button", + BS_AUTORADIOBUTTON,23,62,60,10 + GROUPBOX "Page Details",IDC_STATIC,7,87,206,65 + CONTROL "",IDC_FRAMEIMG,"Static",SS_BITMAP | SS_REALSIZEIMAGE, + 128,40,16,14 + EDITTEXT IDC_REFRESH,96,131,30,12,ES_AUTOHSCROLL | ES_NUMBER | + NOT WS_BORDER,WS_EX_STATICEDGE + LTEXT "Title Page Refresh (s)",IDC_STATIC,20,133,69,8 +END + +IDD_BROWSE DIALOGEX 0, 0, 220, 201 +STYLE DS_MODALFRAME | WS_CHILD | WS_CAPTION | WS_SYSMENU +CAPTION "Browse Options" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + EDITTEXT IDC_MP3_ROOT,23,35,150,12,ES_AUTOHSCROLL | NOT WS_BORDER, + WS_EX_STATICEDGE + GROUPBOX "Browsing Options",IDC_STATIC,7,7,206,187 + LTEXT "Root Directory",IDC_STATIC,23,24,114,8 + EDITTEXT IDC_FILETYPES,23,98,150,12,ES_AUTOHSCROLL | NOT + WS_BORDER,WS_EX_STATICEDGE + LTEXT "Loadable Filetypes",IDC_STATIC,23,87,153,8 + PUSHBUTTON "?",IDC_FILETYPEHELP,177,98,12,12 + PUSHBUTTON "?",IDC_ROOTDIRHELP,177,35,12,12 + CONTROL "Show",IDC_OTHER_FILES_SHOW,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,79,129,38,9 + CONTROL "Download",IDC_OTHER_FILES_DL,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,126,129,48,9 + CONTROL "Download",IDC_WA_FILES_DL,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,126,116,51,10 + LTEXT "Other files:",IDC_STATIC,23,129,40,9 + LTEXT "Winamp Files:",IDC_STATIC,23,116,55,10 + CONTROL "Show",IDC_WA_FILES_SHOW,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,79,116,38,10 + EDITTEXT IDC_PLAYLISTDIR,23,67,150,12,ES_AUTOHSCROLL | NOT + WS_BORDER,WS_EX_STATICEDGE + LTEXT "Playlist Directory (Leave empty for Root Dir)", + IDC_STATIC,23,56,147,8 + PUSHBUTTON "?",IDC_PLAYLISTDIRHELP,177,67,12,12 +END + +IDD_ABOUT DIALOG DISCARDABLE 0, 0, 220, 201 +STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "About" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "",IDC_MAINIMAGE,"Static",SS_BITMAP,6,13,206,68 + CTEXT "Title goes here",IDC_ABOUT_TITLE,5,88,207,14 + CTEXT "© Phil Himsworth 2002\r\n\r\ncontact@flippet.net - http://www.flippet.org", + IDC_STATIC,9,160,201,28 + CTEXT "Remote control winamp from your web browser. First released waaaay back in August 2001; now much improved and shinier than ever!\r\n\r\nIf you see anything broken, or have an idea, get in touch and I'll have a look...", + IDC_STATIC,9,101,202,48 +END + +IDD_LOG DIALOGEX 0, 0, 220, 201 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Log File" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + GROUPBOX "Server Access Log",IDC_STATIC,7,7,206,108 + LTEXT "WAWI keeps a log of who has accessed the server for diagnostic or statistical purposes.", + IDC_STATIC,18,26,125,25 + EDITTEXT IDC_LOGFILEPATH,17,84,179,12,ES_AUTOHSCROLL | NOT + WS_BORDER,WS_EX_STATICEDGE + LTEXT "Logfile Directory (leave empty for Plugins Dir)", + IDC_STATIC,17,71,146,8 + PUSHBUTTON "View Log...",IDC_VIEWLOG,149,26,50,14 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO DISCARDABLE +BEGIN + IDD_USERS, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 213 + TOPMARGIN, 7 + BOTTOMMARGIN, 194 + END + + IDD_SERVER, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 213 + TOPMARGIN, 7 + BOTTOMMARGIN, 194 + END + + IDD_WEBPAGE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 213 + TOPMARGIN, 7 + BOTTOMMARGIN, 194 + END + + IDD_BROWSE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 213 + TOPMARGIN, 7 + BOTTOMMARGIN, 194 + END + + IDD_LOG, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 213 + TOPMARGIN, 7 + BOTTOMMARGIN, 194 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_USERS ICON DISCARDABLE "users.ico" +IDI_SERVER ICON DISCARDABLE "server.ico" +IDI_WEBPAGE ICON DISCARDABLE "webpage.ico" +IDI_BROWSE ICON DISCARDABLE "browse.ico" +IDI_LOG ICON DISCARDABLE "Log.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +IDB_FRAMES_TWO BITMAP DISCARDABLE "Images\\frames_two_lg.bmp" +IDB_FRAMES_THREE BITMAP DISCARDABLE "Images\\frames_three_lg.bmp" +IDB_FRAMES_ONE BITMAP DISCARDABLE "Images\\frames_one_lg.bmp" +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// English (U.K.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// IMAGE +// + +IDR_DOWNLOAD IMAGE DISCARDABLE "download.gif" +IDR_IMG_POPUP IMAGE DISCARDABLE "Images\\popup.gif" +IDR_PLAYDIR IMAGE DISCARDABLE "playdir.gif" +IDR_URLSCT IMAGE DISCARDABLE "Images\\world.gif" +IDR_IMG_ADMIN IMAGE DISCARDABLE "Images\\admin.gif" +IDR_IMG_OK IMAGE DISCARDABLE "Images\\OK.gif" +IDR_IMG_RPT_ON IMAGE DISCARDABLE "Images\\repeaton.gif" +IDR_IMG_RND_ON IMAGE DISCARDABLE "Images\\randomon.gif" +IDR_IMG_RPT_OFF IMAGE DISCARDABLE "Images\\repeatoff.gif" +IDR_IMG_RND_OFF IMAGE DISCARDABLE "Images\\randomoff.gif" +IDR_IMG_LIST_DEL IMAGE DISCARDABLE "Images\\list_delete.gif" +IDR_IMG_LIST_PLAY IMAGE DISCARDABLE "Images\\list_play.gif" + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_WINAMP ICON DISCARDABLE "images\\winamp.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +IDB_TITLE BITMAP DISCARDABLE "Images\\Title Graphic\\No Background.bmp" + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 7,5,10,0 + PRODUCTVERSION 7,5,10,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "080904b0" + BEGIN + VALUE "Comments", "Winamp Web Interface Plugin\0" + VALUE "CompanyName", " \0" + VALUE "FileDescription", "Winamp Web Interface Plugin\0" + VALUE "FileVersion", "7, 5, 10, 0\0" + VALUE "InternalName", "gen_httpSrv\0" + VALUE "LegalCopyright", "Copyright © 2002 Phil Himsworth\0" + VALUE "LegalTrademarks", "It's mine, dammit, MINE!\0" + VALUE "OriginalFilename", "gen_httpSrv.dll\0" + VALUE "PrivateBuild", "\0" + VALUE "ProductName", " gen_httpSrv\0" + VALUE "ProductVersion", "7, 5, 10, 0\0" + VALUE "SpecialBuild", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x809, 1200 + END +END + +#endif // !_MAC + +#endif // English (U.K.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/Wawi Source/Wawi_Readme.txt b/Wawi Source/Wawi_Readme.txt new file mode 100644 index 0000000..e62b2a9 --- /dev/null +++ b/Wawi Source/Wawi_Readme.txt @@ -0,0 +1,231 @@ +---------------------- +Winamp Web Interface +---------------------- + +WAWI is a plugin which gives you remote control of Winamp from any computer which can access it over a network with any common-or-garden web browser. It lets you have full control over immediate playback, lets you edit the playlist and add songs +from your music collection, all without touching the computer actually running winamp or installing anything on the client computer. + + +Using It +-------- + +Install the plugin and point your browser at your computer. By default it runs on the normal web server port 80, but that can be changed in the Options->Server window. For example, at your own computer http://localhost/ should bring it up. If you change the port you can use http://localhost:xxxx instead, where xxxx is the port number. The main screen should appear; from there everything is linked so you can control winamp, access the playlist etc. + +To start with you can't actually do much; you need to set up some permissions first. Do this in the Options -> Users window. + + +Adding Users +------------ + +Initially there is just one user listed, 'anon'... this is anyone who hasn't logged in using a different name. It does not have a password, and to start with has no permissions; change permissions by clicking on the boxes for what you want anyone to be able to do, and click 'Add/Update'. + +To add a new user, maybe to let you control winamp but only let others look but not touch, type in a username in the 'user' box and a password in the 'password' box, check the desired access permissions, and click 'Add/Update'. Bingo, a new user. + +Delete a user by clicking on the name in the list or typing the name straight into the 'user' box and click 'Delete'. Gone... + + +Different Modes for Different Browsers +-------------------------------------- + +The default mode is using two frames, one for the black bar along the top with the blue buttons and the main frame which displays the pages. + +If you're using a no-frames browser select 'One Frame' in the Options->Web Page window. This will disable the top frame, and instead have a set of text links on each page to navigate around pages. + +If you are using the interface from a PDA or something with a similarly small screen, there is a special small page with the basic controls on it, which lets you change the state of Random and Repeat and control playback. Point your browser at '/pda' to access this page. + +The three frames mode is currently experimental but I think it works properly. This is similar to the two frame mode but with another frame at the bottom which updates with the song title and allows the main page to stay where it is when loading files or playing songs in the playlist. + + +Keeping track of what goes on +----------------------------- + +The plugin keeps a log of who's been accessing the interface. By default this is kept in a file in the winamp 'plugins' directory called 'httpsrv.log'. Once this log file reaches 50KB it is renamed to 'httpsrv_<date>_<number>.log', for example the second full log file generated on the 12th of April 2002 will be named 'httpsrv_12-4-2002_2.log'. + +The log file stores the time of the connection, the IP address and username of the client, the page they requested and the HTTP return code, for example '200' is a successful operation and '401' is when access is not allowed to a page or function. + + +Your Music Collection +--------------------- + +The web interface can load files into winamp from a directory specified as your music collection. Enter the path of your music collection into the box in the options screen, make sure you have the right access permission, and go load songs. + +The contents of each directory are listed in a fairly self explanatory manner. Clicking on the name of a file or the icon next to it will load a file into winamp. Clicking on the name of a directory or the icon of a folder will browse that directory. Clicking on the icon of a folder with a red plus sign will add the entire contents of the folder to the playlist. + +If downloading files is enabled, clicking on the icon of a disk will download a file onto the user's computer. Change this setting from the Options window. + +Files that the interface should be able to load can be specified in the Options->Music Collection window; enter the extension of a file into the 'Filetypes' box to enable loading it from the interface. For example the default is 'wav mp3 m3u url', which allows MP3 files, Wave files, Winamp playlists and Internet Shortcuts to be loaded. + +Internet Shortcut files appear with an icon of a world; loading these will load the target of the shortcut into the winamp playlist. This is useful if you make a shortcut to an internet radio station, for example. + + +Tinkering with how it looks +--------------------------- + +To alter the look of the page you can define your own Stylesheet to be sent along with the pages, if for example you are integrating it into another website or simply want to change how it looks. If there is a stylesheet in the winamp plugins directory called 'wawi.css' it will be used. If there isn't one there the default built-in stylesheet will be used instead. + + +Errors +------ + +If you've not told it to keep quiet it will pop up a message if it can't open the specified port. This is usually because there's another program using it - check you haven't got another web server running, as the default port for the plugin is the standard web port. If this is the case change it in the Config window for the plugin. If you tell it to not bother you if an error occurs it will sit quietly doing nothing. + + +Bugs +---- + +Hopefully the problem with MD5 passwords should be fixed now, after I finally got my hands on a computer that it wouldn't work on. However just in case it crops up again... sometimes it will not let you log in if passwords are being stored securely. If this seems to be the case tick the "debug" box and see what it says when adding a user or changing a password; if it says something like "encoded password" and a short string of gibberish (rather than a long string of alphanumerical gibberish) then please let me know about it! In the meantime, untick the secure mode; this should work. The difference is how the password is stored on your computer, not how it is sent over the network. + +It was designed mainly using IE6 as a client... while Netscape and Lynx like it, Opera 6 seems to have a few problems; the currently playing track is not highlighted in the playlist; the main page doesn't update properly when selecting a track from the playlist to play. I shall look into it. + +The 'download' function didn't work for me on Windows 9x; it has been fiddled with extensively but given that I now run Windows 2000 I have no way of testing it any more. It works on 2000. The interface uses the same method to send a StyleSheet for the web pages; while downloading files is not essential this probably is; let me know if it goes wrong and I'll try to fix it. + +There're bound to be more... let me know if you find any. + + + +Possibly More Recent Versions +----------------------------- + +At the moment (April 2002) I am working on this regularly, so a new version is uploaded to the WAWI web site frequently. Check there for recent versions including bug fixes and new features. Wander over to www.flippet.net... + + + +Test Platforms so far +--------------------- + +Development started on a Windows Me system, but now is done entirely on Windows 2000. Platforms I know it has been used on are now too numerous to name individually, but range from various versions of windows to PDAs. I feel quite boring using it from my laptop... + + + +Change Log +---------- + +7.5.10 + +* Fixed the silly thing with the "browse" pages if you didn't give it a path to start with - it would show the root directory but none of the links would work. + +7.5.9 + +* Secure passwords should now work ALL the time!!! Woohoo!!! (Hopefully...) + +7.5.8 + +* Fixed the Base64 password system AGAIN, hopefully for the last time! + +7.5.7 + +* Fixed which frame the new Delete went to (now stays in one frame; bit daft deleting something but not updating the playlist... +* Added a line in the HTTP header of HTML pages to stop the page being cached (hopefully) +* Made the 'random' and 'repeat' stay on the main page (again, a bit daft turning random off if the main page says it's still on and the like) + +7.5.6 + +* Fixed the Base64 encoding/decoding, which hopefully should solve some password problems. +* Changed how delete playlist entry works - should be faster now, hopefully. + +7.5.5 + +* Added a Save Playlist option +* Fixed a little bug if you tried to use a password of 'password' (muppet... ;¬P ) + +7.5 + +* Shiny new Options window; pretty pictures and pages, rather than having all options crammed onto one page + +7.1 + +* First half-decent three frames mode! +* Ability to sort the playlist by title from the playlist page + +7.0.1 + +* Fixed bug where there were no users in the list when first installing it +* Cleaned up the delete playlist entries function a bit + +7.0 + +* Define your own stylesheet... if there's a file called 'wawi.css' in the plugins directory it will be used as a stylesheet. +* Ability to remove tracks from the playlist +* First introduction of web-based user management page, accessible from the 'admin' page. I think it looks funny on Opera though... I'll fix it shortly... +* Fixed bug where it would not save changes from the web admin page +* Slight under-the-hood change of page refreshing on adding files from the Browse pages +* Addded a 'PDA' mode for simple controls on small browsers - just point at '/pda' +* Added a password debug mode; if you have problems let me know what it says. +* Made it work again on w9x (sorry...) +* Certain options can be changed from the web interface with a new Admin page. +* When loading a file from the Browse page it will now return to the page where you clicked, instead of having to navigate back to it again. +* Option of using secure or non-secure passwords if you encounter problems. + +6.0 + +* Added a 'restrict search' option; narrow your search of the playlist. I find it very handy. +* It now uses escape characters properly, so it should work on more browsers (the file browsing didn't work on Lynx before). +* 'View Log' button works wherever the log file directory is set to +* Massive, but under the hood, changes; any variables passed to the server are in the proper 'name=value' format, so they can be used from forms. +* Icons in the Browse section don't have silly backgrounds. At last! + +5 + +* Added a completely new authentication system. You can set up users with different permissions - browse files, download files, add files to the playlist, clear the playlist and actually control playback. +* Added a favicon.ico so if you make it a Favourite you'll get a nice pwetty picture. Wow... + +4 + +* Added a 'play URL immediately' option. Load a normal URL using /url?l&http://whatever, and play one immediately by /url?p&http://whatever. +* Requesting '/title' from the server returns a very simple page with just the currently playing song title, and which refreshes every minute. +* Requesting 'smalltitle' returns something similar, but it's just dead simple plain text version of the song info, so it can be included in another page or something along those lines. +* Directories have a 'play' button so you can load songs a directory at a time rather than a file at a time (which took ages!) +* Made links work properly in browsers that didn't convert spaces to %20s (eg. Lynx). There are probably other characters in names that don't work... if you find any, let me know. +* Added an (unlinked) url? command, which can play any filepath, UNC path, HTTP file, you name it. Just type it in... "/url?http://computer/path/to/song.mp3" and (hopefully) it'll work. +* Improved log handling - logs are rotated if they get big +* The popup window link works properly now and can be added to your Favourites or Bookmarks or whatever. +* Added an option to turn off the password protection if it annoys you and you've no need for it. +* Added a 'Stop with fadeout' button to the graphic link bar. It's not on the text link bar, but you can still use it if you must by typing in "/stopslow" in the Address bar of your browser. +* Passwords! Stop peeps messing... properly. +* A button to load the interface in a smaller popup window without the normal browser baggage like buttons and stuff. Still experimental, but it's there. +* The bar at the top is now a seperate frame to avoid having it reload the images every time. +* It also has a text only (well, mostly) mode if you don't like the top links at all; this makes it look like it did before version 3.0. + +3 +* A nice shiny bar at the top instead of the old text links bar. Popup about window; customisable title; and slightly better html. +* Under-the-hood changes; includes better http parsing, and should be faster too. Doesn't crash my network card any more! Also includes a small 'about' window from the browser, and lets you put your own title in for the main page. +* Wooo, shiny... now includes graphics in the Music Collection pages. Playlists (.m3u files) are handled better too. +* First submitted to winamp.com! +* The file types that can be loaded into winamp from the Browse section can now be chosen in the Options window. By default .wav and .mp3 files are loadable. Other filetypes can be displayed or hidden as desired. The access log file can also be viewed from within Winamp by clicking the View Log button in the options window. +* Now creates a log file with every connection, showing time, client and requested URL. Stored in a file in the plugins directory; I know several plugins where the log file ends up all over the place... +* Mainly under-the-hood changes; should be safer with multiple connections. More obvious directories in Browse pages. Got rid of server bluescreening problem! +* Added 'Read Only' option to stop people fiddling if you don't want them to. + +2 +* Added file browsing and adding. +* Added html stylesheets, proper html and random things to make it look nice + +1 +* Initial release + + + +Me +-- + +Phil Himsworth, UK + +web: http://www.flippet.org +email: contact@flippet.net + +September, 2002 + + + + +The Dull(er?) Bits +------------------ + +Disclaimer +---------- + +While I've gone to every effort to make sure this doesn't cause harmful effects - I don't want to fry my own computer! - I cannot say for sure that it will not fry yours. I will not be responsible for any damage or loss of anything even slightly relating to this program. You use it ENTIRELY AT YOUR OWN RISK. Don't run to me if things break. I'll fix bits of the program if you spot bugs if I want to, but I'm under no obligation to do so at all. And don't you forget it. + +Besides that, I hope it's useful. Have fun! + + diff --git a/Wawi Source/WebAdmin.cpp b/Wawi Source/WebAdmin.cpp new file mode 100644 index 0000000..452601e --- /dev/null +++ b/Wawi Source/WebAdmin.cpp @@ -0,0 +1,530 @@ +/* --- WEBADMIN.CPP --- +/ +/ Written by Phil Himsworth, 2001-2002. +/ +/*/ + +#include <windows.h> +#include "types.h" +#include "main.h" +#include "html.h" +#include "plugin.h" +#include "resource.h" + +#include "op_winamp.h" + +extern char mp3root[MAX_PATH], playlistdir[MAX_PATH], logfiledir[MAX_PATH], filetypes[255]; +extern int browse_enable, dl_wa_files, dl_other_files, show_other_files, frames, title_refresh, securepassword; + +extern char szAppVer[]; +extern char pagetitle[255]; + +extern winampGeneralPurposePlugin plugin; + +// -------------------------------------------------------------------------------- +// Returns Web Admin page +int CControl::WebAdmin(connection * conn) +{ + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + OpenHtmlHeader(conn); + Style(conn); + CloseHeader(conn); + OpenPageBody(conn); + + prints(conn,"<h3>\n<i>\n... Wawi Remote Admin ...\n</i></h3>\n"); + + prints(conn,"<h4>"); + Link(conn,"/user","<font color=red>[</font>User Management<font color=red>]</font>",T_MAIN); + prints(conn,"</h4>\n"); + + prints(conn,"<form action=\"/apply\" method=\"get\">\n"); + + prints(conn,"<table width=\"100%\" cellspacing=\"5\" cellpadding=\"0\" border=\"0\">\n<tr>\n"); + prints(conn,"<td align=\"right\">Main Page Title</td>\n<td><input type=\"text\" name=\"title\" size=\"30\" value=\""); + prints(conn,pagetitle); + prints(conn,"\"></td>\n</tr>\n<tr>\n"); + prints(conn,"<td align=\"right\">Loadable Filetypes</td>\n<td><input type=\"text\" name=\"filetypes\" size=\"30\" value=\""); + prints(conn,filetypes); + prints(conn,"\"></td>\n</tr>\n<tr>\n"); + prints(conn,"<td align=\"right\">Music Root Directory</td>\n<td><input type=\"text\" name=\"root\" size=\"30\" value=\""); + prints(conn,mp3root); + prints(conn,"\"></td>\n</tr>\n<tr>\n"); + prints(conn,"<td align=\"right\">Playlists Directory</td>\n<td><input type=\"text\" name=\"playlists\" size=\"30\" value=\""); + prints(conn,playlistdir); + prints(conn,"\"></td>\n</tr>\n<tr>\n<td>&nbsp;</td>\n</tr>\n<tr>\n"); + + + // Frames mode radio buttons + prints(conn,"<td align=\"right\">Frames:</td>\n<td><input type=\"radio\" name=\"frames\" value=\"1\""); + if (frames == 1) + prints(conn," checked=\"on\""); + prints(conn,">No Frames</td>\n</tr>\n<tr>\n<td align=\"right\">&nbsp;</td>\n<td><input type=\"radio\" name=\"frames\" value=\"2\""); + if (frames == 2) + prints(conn," checked=\"on\""); + prints(conn,">2</td>\n</tr>\n<tr>\n<td align=\"right\">&nbsp;</td>\n<td><input type=\"radio\" name=\"frames\" value=\"3\""); + if (frames == 3) + prints(conn," checked=\"on\""); + + prints(conn,">3</td>\n</tr>\n<tr>\n"); + prints(conn,"<td align=\"right\">Secure Passwords</td>\n<td><input type=\"checkbox\" name=\"securepassword\""); + if (securepassword == 1) + prints(conn," checked=\"on\""); + prints(conn,"><b>Warning!</b> Changing this will invalidate all user passwords.</td>\n</tr>\n<tr>"); + prints(conn,"<td>&nbsp;</td>\n</tr>\n<tr>\n"); + prints(conn,"<td align=\"right\">Winamp Files</td>\n<td><input type=\"checkbox\" name=\"dl_wa_files\""); + if (dl_wa_files == 1) + prints(conn," checked=\"on\""); + prints(conn,">Download</td>\n</tr>\n<tr>\n"); + prints(conn,"<td align=\"right\">Other Files</td>\n<td><input type=\"checkbox\" name=\"dl_other_files\""); + if (dl_other_files == 1) + prints(conn," checked=\"on\""); + prints(conn,">Download <input type=\"checkbox\" name=\"show_other_files\""); + if (show_other_files == 1) + prints(conn," checked=\"on\""); + prints(conn,">Show</td>\n</tr>\n"); + prints(conn,"<td colspan=\"2\" align=\"center\"><input type=\"image\" alt=\"Apply Changes\" src=\"img?image="); + printsi(conn,IDR_IMG_OK); + prints(conn,"\"></td>\n</tr>\n</table>"); + prints(conn,"</form>\n"); + + + + if (frames == 1) + LinkBar(conn); + prints(conn,"<p>&nbsp;</p>"); + + return ST_CLOSEBODY; +} + +// Returns admin apply page and actually does the stuff +int CControl::ApplyAdmin(connection * conn) +{ + bool changed = false; + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + OpenHtmlHeader(conn); + Style(conn); + CloseHeader(conn); + OpenPageBody(conn); + + prints(conn,"<h3>\n<i>\n... Wawi Remote Admin ...\n</i></h3>\n"); + + char instring[255]; // used for everything + + if (GetArgValue(conn,"title",instring,255)) + { + Unescape_url(instring); + if (!StrComp(pagetitle,instring)) + { + lstrcpy(pagetitle,instring); + prints(conn,"<p>Page title changed to <b>"); + prints(conn,pagetitle); + prints(conn,"</b></p>\n"); + changed = true; + } + } + + if (GetArgValue(conn,"filetypes",instring,255)) + { + Unescape_url(instring); + if (!StrComp(filetypes,instring)) + { + lstrcpy(filetypes,instring); + prints(conn,"<p>Filetypes changed to <b>"); + prints(conn,filetypes); + prints(conn,"</b></p>\n"); + changed = true; + } + } + + if (GetArgValue(conn,"root",instring,255)) + { + Unescape_url(instring); + if (!StrComp(mp3root,instring)) + { + lstrcpy(mp3root,instring); + prints(conn,"<p>Root music directory changed to <b>"); + prints(conn,mp3root); + prints(conn,"</b></p>\n"); + changed = true; + } + } + + if (GetArgValue(conn,"playlists",instring,255)) + { + Unescape_url(instring); + if (!StrComp(playlistdir,instring)) + { + lstrcpy(playlistdir,instring); + prints(conn,"<p>Playlist directory changed to <b>"); + prints(conn,playlistdir); + prints(conn,"</b></p>\n"); + changed = true; + } + } + + wsprintf(instring,"2"); + GetArgValue(conn,"frames",instring,255); + if (StrComp(instring,"1")) + { + if (frames != 1) + { + frames = 1; + prints(conn,"<p>No Frames mode turned <b>On</b></p>"); + changed = true; + } + } + else + { + if (StrComp(instring,"3")) + { + if (frames != 3) + { + frames = 3; + prints(conn,"<p>Three Frames mode turned <b>On</b></p>"); + changed = true; + } + } + else + { + if (frames != 2) + { + frames = 2; + prints(conn,"<p>Two Frames mode turned <b>On</b></p>"); + changed = true; + } + } + } + + wsprintf(instring,"off"); + GetArgValue(conn,"securepassword",instring,255); + if (StrComp(instring,"on")) + { + if (securepassword == 0) + { + securepassword = 1; + prints(conn,"<p>Secure passwords turned <b>On</b></p>"); + changed = true; + } + } + else + { + if (securepassword == 1) + { + securepassword = 0; + prints(conn,"<p>Secure passwords turned <b>Off</b></p>"); + changed = true; + } + } + + wsprintf(instring,"off"); + GetArgValue(conn,"dl_wa_files",instring,255); + if (StrComp(instring,"on")) + { + if (dl_wa_files == 0) + { + dl_wa_files = 1; + prints(conn,"<p>Downloading of Winamp files is <b>Enabled</b></p>"); + changed = true; + } + } + else + { + if (dl_wa_files == 1) + { + dl_wa_files = 0; + prints(conn,"<p>Downloading of Winamp files is <b>Disabled</b></p>"); + changed = true; + } + } + + wsprintf(instring,"off"); + GetArgValue(conn,"dl_other_files",instring,255); + if (StrComp(instring,"on")) + { + if (dl_other_files == 0) + { + dl_other_files = 1; + prints(conn,"<p>Downloading other files is <b>Enabled</b></p>"); + changed = true; + } + } + else + { + if (dl_other_files == 1) + { + dl_other_files = 0; + prints(conn,"<p>Downloading other files is <b>Disabled</b></p>"); + changed = true; + } + } + + wsprintf(instring,"off"); + GetArgValue(conn,"show_other_files",instring,255); + if (StrComp(instring,"on")) + { + if (show_other_files == 0) + { + show_other_files = 1; + prints(conn,"<p>Listing other files is <b>Enabled</b></p>"); + changed = true; + } + } + else + { + if (show_other_files == 1) + { + show_other_files = 0; + prints(conn,"<p>Listing other files is <b>Disabled</b></p>"); + changed = true; + } + } + + if (changed == false) + prints(conn,"<p>No changes made.</p>\n"); + + config_write(); + + prints(conn,"<p>"); + ImgLink(conn,"/",IDR_IMG_OK,"Return to Main Page",0,0,T_TOP); + prints(conn,"</p>\n"); + + return ST_CLOSEBODY; +} + +// -------------------------------------------------------------------------------- +// User admin page +int CControl::User(connection * conn) +{ + + char username[20]; + char password[40]; + int access; + + if (!GetArgValue(conn,"user",username,20)) + wsprintf(username,"anon"); + + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + + OpenHtmlHeader(conn); + Style(conn); + CloseHeader(conn); + OpenPageBody(conn); + + prints(conn,"<h3>\n<i>\n... Wawi User Admin ...\n</i></h3>\n"); + + prints(conn,"<form action=\"/user\" method=\"get\">\n<p>\n"); + prints(conn,"<table border=\"0\" cellpadding=\"0\" cellspacing=\"5\">\n<tr>\n<td align=\"right\">"); + prints(conn,"Show User:</td>\n<td colspan=\"2\"><select onchange=\"form.submit()\" size=\"1\" name=\"user\">\n"); + + user * users = NULL; + + char ini_file[MAX_PATH], *p; + GetModuleFileName(plugin.hDllInstance,ini_file,sizeof(ini_file)); + p=ini_file+lstrlen(ini_file); + while (p >= ini_file && *p != '\\') p--; + if (++p >= ini_file) *p = 0; + lstrcat(ini_file,"gen_httpsrv.ini"); + + users = RetrieveUsers(users, ini_file); // fill list 'users' with usernames + user * current = users; // pointer to start of list + + bool goodname = false; + + while(current != NULL) + { + prints(conn,"<option value=\""); + prints(conn,current->name); + if (StrComp(current->name,username)) + { + prints(conn,"\" selected>"); + goodname = true; + } + else + prints(conn,"\">"); + prints(conn,current->name); + prints(conn,"</option>\n"); + current = current->next; + delete users; + users = current; + } + + prints(conn,"</select>\n"); + + prints(conn,"<input type=\"image\" alt=\"Show information\" src=\"img?image="); + printsi(conn,IDR_IMG_OK); + prints(conn,"\"></td>\n</tr>\n</table>\n</p>\n</form>\n"); + + if (!goodname) + { + prints(conn,"<p>User <b>"); + prints(conn,username); + prints(conn,"</b> is not a user of this server.</p>"); + return ST_CLOSEBODY; + } + else + { + char userkey[30]; + wsprintf(userkey,"#%s_access",username); + access = GetPrivateProfileInt("Users",userkey,AUTH_ANON,ini_file); + GetPrivateProfileString("Users",username,"password",password,40,ini_file); + + prints(conn,"<form action=\"/setuser\" method=\"get\">\n<p>\n"); + prints(conn,"<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"5\">\n"); + prints(conn,"<tr>\n<td align=\"right\">User</td>\n"); + prints(conn,"<td colspan=\"2\"><input type=\"text\" name=\"user\" size=\"40\" value=\""); + prints(conn,username); + prints(conn,"\"></td>\n</tr>\n"); + prints(conn,"<tr>\n<td align=\"right\">Password</td>\n"); + prints(conn,"<td colspan=\"2\"><input type=\"password\" name=\"p\" size=\"40\" value=\""); + if (!StrComp(username,"anon")) + prints(conn,password); + prints(conn,"\"></td>\n</tr>\n"); + + prints(conn,"<tr>\n<td colspan=\"2\">&nbsp;</td>\n</tr>\n"); + prints(conn,"<tr>\n<td align=\"right\">Server<input type=\"checkbox\" name=\"a_server\" "); + if (access & AUTH_SERVER) + prints(conn,"checked=\"on\""); + prints(conn,"></td>\n"); + + prints(conn,"<td align=\"left\"><input type=\"checkbox\" name=\"a_playlist\" "); + if (access & AUTH_PLAYLIST) + prints(conn,"checked=\"on\""); + prints(conn,">Add files</td>\n</tr>\n"); + + prints(conn,"<tr>\n<td align=\"right\">Play<input type=\"checkbox\" name=\"a_control\" "); + if (access & AUTH_CONTROL) + prints(conn,"checked=\"on\""); + prints(conn,"></td>\n"); + + prints(conn,"<td align=\"left\"><input type=\"checkbox\" name=\"a_download\" "); + if (access & AUTH_DOWNLOAD) + prints(conn,"checked=\"on\""); + prints(conn,">Download</td>\n</tr>\n"); + + prints(conn,"<tr>\n<td align=\"right\">Remove files<input type=\"checkbox\" name=\"a_clear\" "); + if (access & AUTH_CLEAR) + prints(conn,"checked=\"on\""); + prints(conn,"></td>\n"); + + prints(conn,"<td align=\"left\"><input type=\"checkbox\" name=\"a_browse\" "); + if (access & AUTH_BROWSE) + prints(conn,"checked=\"on\""); + prints(conn,">Browse</td>\n</tr>\n<tr>\n<td colspan=\"2\" align=\"center\">"); + + prints(conn,"<input type=\"submit\" name=\"addupd\" value=\"Add/Update\">"); + prints(conn,"<input type=\"submit\" name=\"delete\" value=\"Delete\">\n</td>\n</tr>\n</table>\n</p>\n</form>\n"); + + } + + if (frames == 1) + LinkBar(conn); + + prints(conn,"<p>&nbsp;</p>\n"); + + + + return ST_CLOSEBODY; +} + +// -------------------------------------------------------------------------------- +// Sets stuff from the user admin page +int CControl::SetUser(connection * conn) +{ + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + OpenHtmlHeader(conn); + Style(conn); + + prints(conn,"<h3>\n<i>\n... Wawi User Admin ...\n</i></h3>\n"); + char username[20]; + char password[40]; + if (!GetArgValue(conn,"user",username,20) || StrComp(username,"")) + { + CloseHeader(conn); + OpenPageBody(conn); + prints(conn,"<p>No user selected.</p>\n"); + ImgLink(conn,"/main",IDR_IMG_OK,"Return to main page",0,0,T_MAIN); + return ST_CLOSEBODY; + } + + char ini_file[MAX_PATH], *p; + GetModuleFileName(plugin.hDllInstance,ini_file,sizeof(ini_file)); + p=ini_file+lstrlen(ini_file); + while (p >= ini_file && *p != '\\') p--; + if (++p >= ini_file) *p = 0; + lstrcat(ini_file,"gen_httpsrv.ini"); + + + char whichbutton[20]; + if (GetArgValue(conn,"delete",whichbutton,20)) + { + DeleteUser(ini_file,username); + RefreshHeader(conn,"/user"); + CloseHeader(conn); + OpenPageBody(conn); + prints(conn,"<p>Deleting user <b>"); + prints(conn,username); + prints(conn,"</b></p>\n"); + + return ST_CLOSEBODY; + } + + + + char refreshto[40]; + wsprintf(refreshto,"/user?user=%s",username); + RefreshHeader(conn,refreshto); + CloseHeader(conn); + OpenPageBody(conn); + + prints(conn,"<p>Updating user information for <b>"); + prints(conn,username); + prints(conn,"</b></p>\n"); + + GetArgValue(conn,"p",password,40); + //MessageBox(NULL,password,"password",MB_OK | MB_TOPMOST); + + int access = 0; + char authstring[10]; + + if (GetArgValue(conn,"a_server",authstring,10)) + if (StrComp(authstring,"on")) + access += AUTH_SERVER; + + if (GetArgValue(conn,"a_control",authstring,10)) + if (StrComp(authstring,"on")) + access += AUTH_CONTROL; + + if (GetArgValue(conn,"a_clear",authstring,10)) + if (StrComp(authstring,"on")) + access += AUTH_CLEAR; + + if (GetArgValue(conn,"a_playlist",authstring,10)) + if (StrComp(authstring,"on")) + access += AUTH_PLAYLIST; + + if (GetArgValue(conn,"a_download",authstring,10)) + if (StrComp(authstring,"on")) + access += AUTH_DOWNLOAD; + + if (GetArgValue(conn,"a_browse",authstring,10)) + if (StrComp(authstring,"on")) + access += AUTH_BROWSE; + + + + UpdateUser(ini_file,username,password,access); + + return ST_CLOSEBODY; +} diff --git a/Wawi Source/browse.cpp b/Wawi Source/browse.cpp new file mode 100644 index 0000000..eabe0f9 --- /dev/null +++ b/Wawi Source/browse.cpp @@ -0,0 +1,460 @@ +/* --- BROWSE.CPP --- +/ +/ Written by Phil Himsworth, 2001-2002. +/ +/ Contains everything for the "Browse Music Collection" pages. + +/*/ + +#include <windows.h> +#include "types.h" +#include "main.h" +#include "resource.h" + + +#include "html.h" + + +/* All this lot made obsolete by using all local vars instead - + Should make it more thread-safe, anyway (even if it seems to + work anyway...) + +int dnodes=0; +int fnodes=0; + +char tempstring[200]; + + +fileinfo * firstfile; +fileinfo * firstdir; + +*/ + +extern int show_other_files, dl_other_files, dl_wa_files, frames; + +extern char filetypes[255]; +extern char mp3root[MAX_PATH]; + +// -------------------------------------------------------------------------------- +// Removes the topmost directory to go to parent directory +void UpDirectory(char * mp3path, char * mp3pathout) +{ + + int c=0; + while(mp3path[c] != 0) // increment c until it is at end of mp3path + c++; + + c-=2; // c is now character before last slash + + while(mp3path[c] != '\\') // decrement c to find second to last slash + c--; + + c++; + mp3pathout[c] = 0; + c--; // c now points at last required character + + while(c>=0) + { + mp3pathout[c] = mp3path[c]; // copy rest of string across + c--; + } +} + +// -------------------------------------------------------------------------------- +// Tests whether the current name is a Winamp-readable file or not (by file extension) +bool IsWinampFile(fileinfo * file) +{ + file->playlist = false; // clear playlist flag - it's random otherwise + file->urlsct = false; + + char * xtn; // eXTensioN + int c=0; + + while(file->name[c] != 0) // increment c until it is at end of mp3path + c++; + + while(file->name[c] != '.') // decrement c to find last period + c--; + + xtn = &file->name[c+1]; // extension should now be 'mp3', 'wav' etc. + + if (StrComp("m3u",xtn)) // one-off check to see if the file is a playlist + file->playlist=true; // mark as a playlist. + + if (StrComp("url",xtn)) // check if the file is a URL shortcut + file->urlsct = true; // mark as such + // It could return here, but then m3u/url files would be unblockable + + int ptr = 0; // pointer within 'filetypes' + + while(filetypes[ptr] != 0) + { + if (StartString(xtn,filetypes+ptr)) // Check xtn with current filetype in list + return true; + else // No match; next type in list + { + while(filetypes[ptr] != 0 && filetypes[ptr] != ' ') + ptr++; + + if (filetypes[ptr] == ' ') + ptr++; // Space; move pointer to next type + } + } + + + return false; // Should never reach here! +} + +// -------------------------------------------------------------------------------- +// Wrapper around above for just doing filenames, not fileinfo structures +bool IsWinampFile(char * filename) +{ + int strlength=0; + while(filename[strlength] != 0) + strlength++; + + fileinfo file; + ZeroMemory(&file,sizeof(file)); + CopyMemory(file.name,filename,strlength); + + return IsWinampFile(&file); +} + + +// -------------------------------------------------------------------------------- +// Adds a file / directory etc. to the appropriate list +void AddFileToList(connection * conn,WIN32_FIND_DATA *find, char* mp3path, filesearch * search) +{ + char mp3pathout[MAX_PATH]; + + fileinfo *currentfile = search->firstfile; + fileinfo *currentdir = search->firstdir; + + // Directories + if ((find->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) // dir + { + // Current directory '.' + if (StrComp(find->cFileName,".")) // this directory; do nothing + return; + + // Parent Directory '..' + if (StrComp(find->cFileName,"..")) // parent directory + { + if (mp3path[1]==0) // already at root directory + return; + UpDirectory(mp3path, (char*)&mp3pathout); + prints(conn, "<b><font color=red>[</font><a href=\"/browse?path="); + prints(conn, mp3pathout); + prints(conn, "\">Up</a><font color=red>]</font></b><br>\n"); + return; + } + + // Hidden directory + if ((find->dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) == FILE_ATTRIBUTE_HIDDEN) + { + return; + } + + // System directory? Eh? *** Look at this *** + if ((find->dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) == FILE_ATTRIBUTE_SYSTEM) + { + return; + } + + // normal directory + fileinfo *newfile = new fileinfo; + search->dnodes++; + CopyMemory(&newfile->path,mp3path,MAX_PATH); + CopyMemory(&newfile->name,find->cFileName,MAX_PATH); + newfile->next = NULL; + newfile->prev = NULL; + + // No entries in list + if (!search->firstdir) + { + search->firstdir = newfile; + return; + } + else // already entries in list + { + if (GoesBefore(newfile->name,search->firstdir->name)) + { + search->firstdir->prev = newfile; + newfile->next = search->firstdir; + search->firstdir = newfile; + } + else // not first in list + { + Insert(newfile,search->firstdir); + } + } + } + else + { + // files + + /* + This new version with linked lists NO LONGER checks for Winamp files here! + All files are added to the list in the correct order. + */ + + fileinfo *newfile = new fileinfo; + search->fnodes++; + CopyMemory(&newfile->path,mp3path,MAX_PATH); + CopyMemory(&newfile->name,find->cFileName,MAX_PATH); + newfile->next = NULL; + newfile->prev = NULL; + + // No entries in list + if (!search->firstfile) + { + search->firstfile = newfile; + return; + } + else // already entries in list + { + if (GoesBefore(newfile->name,search->firstfile->name)) + { + search->firstfile->prev = newfile; + newfile->next = search->firstfile; + search->firstfile = newfile; + } + else // new file should not be first in list + { + Insert(newfile,search->firstfile); + } + } + } +} + +// -------------------------------------------------------------------------------- +// Checks for ../ to ensure selected directory cannot be higher than mp3root +bool GoodPath(char* mp3path) +{ + int i=0; + + while (mp3path[i] != 0 && i<MAX_PATH) + { + if (mp3path[i]=='.' && i<(MAX_PATH-2)) + if (mp3path[i+1]=='.' && mp3path[i+2]=='\\') + return false; + i++; + } + return true; +} + +// -------------------------------------------------------------------------------- +// Lists selected directory +int Browse(connection * conn,char * mp3path) +{ + filesearch search; + + search.firstfile = NULL; + search.firstdir = NULL; + + Unescape_url(mp3path); + char mp3cd[MAX_PATH]; // when it's finished with... + wsprintf(mp3cd,"%s%s",mp3root,mp3path); + + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + OpenHtmlHeader(conn); + Style(conn); + CloseHeader(conn); + OpenPageBody(conn); + if (frames == 1) + LinkBar(conn); + + prints(conn,"<h3>\n<i>\n... Music Collection ...\n</i></h3>\n"); + prints(conn,"<h3>"); + prints(conn,mp3path); + prints(conn,"</h3>\n"); + + WIN32_FIND_DATA find; + HANDLE file; + + if (!GoodPath(mp3path)) + { + prints(conn,"<p><b>Error!</b></p>\n<p>The path requested is illegal.</p>\n<p>It contains the <b>..</b> directory, which could present a security risk.</p>\n"); + prints(conn,"<p>&nbsp;</p>\n"); + } + else + { + if (!SetCurrentDirectory(mp3cd)) + { + prints(conn,"<p><b>Error!</b></p>\n<p>Couldn't open directory. Ensure you haven't mistyped the path, and that the Music Collection root directory is correct.</p>\n"); + prints(conn,"<p>&nbsp;</p>\n"); + } + else + { + char temp[MAX_PATH], temp2[MAX_PATH]; + // Build linked list + file = FindFirstFile("*", &find); + if (file != INVALID_HANDLE_VALUE) + { + AddFileToList(conn,&find,mp3path,&search); + int done = 1; + while (done != 0) + { + done = FindNextFile(file, &find); + if (done != 0) + AddFileToList(conn,&find,mp3path,&search); + } + + FindClose(file); + + // Print out the linked list + prints(conn,"<p>\n\n"); + + // table format? + prints(conn,"<table border=\"0\" width=\"100%\" cellspacing=\"2\">\n"); + + + fileinfo *oldnode = NULL; + fileinfo *currentdir = search.firstdir; + + while (currentdir != NULL) + { + wsprintf(temp,"%s%s",currentdir->path,currentdir->name); + Escape_url(temp); + prints(conn,"<tr>\n"); + + // gap on the left + prints(conn,"<td width=\"50\">&nbsp;</td>\n"); + + prints(conn,"<td width=\"20\">"); + wsprintf(temp2,"/ld?path=%s", temp); + ImgLink(conn,temp2,IDR_PLAYDIR,"Load this directory",0,0,T_BOTTOM); + + prints(conn,"</td>\n"); + + prints(conn,"<td width=\"20\">"); // <a href="/browse?path= mp3path cFileName">cFileName</a><br> + wsprintf(temp2,"/browse?path=%s%%5c",temp); + ImgLink(conn,temp2,IDR_DIRECTORY,"Explore this directory",0,0,T_MAIN); + + prints(conn,"</td>\n<td width=\"520\"><a href=\"/browse?path="); + prints(conn,temp); // mp3path + name + prints(conn,"%5c\"><b>"); + prints(conn,currentdir->name); + prints(conn,"</b></a></td>\n"); + prints(conn,"</tr>\n"); + + oldnode = currentdir; + currentdir = currentdir->next; + + delete oldnode; + search.dnodes--; + + + } + + + + oldnode = NULL; + fileinfo *currentfile = search.firstfile; + while (currentfile != NULL) + { + wsprintf(temp,"%s%s",currentfile->path,currentfile->name); + Escape_url(temp); + + if (IsWinampFile(currentfile)) + { + + prints(conn,"<tr>\n"); + // gap on the left + prints(conn,"<td width=\"50\">&nbsp;</td>\n"); + + // Download link - disk picture + prints(conn,"<td width=\"20\">"); + + if (dl_wa_files == 1) + { + wsprintf(temp2,"/dl?file=%s",temp); + ImgLink(conn,temp2,IDR_DOWNLOAD,"Download this file",0,0,T_MAIN); + } + else + { + prints(conn,"&nbsp;"); + } + prints(conn,"</td>\n"); + + // Play link - WA file picture + prints(conn,"<td width=\"20\">"); + wsprintf(temp2,"/ld?path=%s",temp); + if (currentfile->playlist) + ImgLink(conn,temp2,IDR_PLAYLIST,"Load this playlist",0,0,T_BOTTOM); + else + if (currentfile->urlsct) + ImgLink(conn,temp2,IDR_URLSCT,"Load this URL",0,0,T_BOTTOM); + else + ImgLink(conn,temp2,IDR_WAFILE,"Load this track",0,0,T_BOTTOM); + + + // Play link - text name + wsprintf(temp2,"</td>\n<td width=\"520\"><a href=\"/ld?path=%s",temp); + prints(conn,temp2); + if (frames == 3) + prints(conn,"\" target=\"bottom\">"); + else + prints(conn,"\">"); + prints(conn,currentfile->name); + prints(conn,"</a></td>\n"); + prints(conn,"</tr>\n"); + } + else // not a winamp file + { + if (show_other_files == 1) + { + prints(conn,"<tr>\n"); + // gap on the left + prints(conn,"<td width=\"50\">&nbsp;</td>\n"); + + prints(conn,"<td width=\"20\">"); + if (dl_other_files == 1) + { + wsprintf(temp2,"/dl?file=%s",temp); + ImgLink(conn,temp2,IDR_DOWNLOAD,"Download this file",0,0,T_MAIN); + } + else + { + prints(conn,"&nbsp;"); + } + prints(conn,"</td>\n"); + + prints(conn,"<td width=\"20\">"); + Img(conn,IDR_FILE,"This is not a winamp file",0,0); + prints(conn,"</td>\n<td width=\"*\"><font color=\"#A0A0A0\">"); // non-winamp file - display greyed out + prints(conn,currentfile->name); + prints(conn,"</font></td>\n"); + + prints(conn,"</tr>\n"); + } + } + + oldnode = currentfile; + currentfile = currentfile->next; + delete oldnode; + search.fnodes--; + + } + + prints(conn,"</table>"); + + prints(conn,"\n</p>\n"); + + /* + // Undeleted nodes count + prints(conn,"<p>"); + printsi(conn,search.dnodes); + prints(conn,"&middot;"); + printsi(conn,search.fnodes); + prints(conn,"</p>\n"); + */ + + } + } + } + return ST_CLOSEBODY; +} + diff --git a/Wawi Source/browse.ico b/Wawi Source/browse.ico new file mode 100644 index 0000000000000000000000000000000000000000..20f02175d148ec0649e65f74eee6d0db50cb7972 GIT binary patch literal 318 zcmah^p$<YZ47>#dati$<o?n>bbC@8hS%P40AH$M8Ilc+}xOPaA*Y56mtyl{<ruQBi zCkGr=3GFO|!=4Ou<A0O@KBP2-%o4qKst$%djG-05)Rxjl+|L#$F^IG$N)0v06-7b} w>RWBoM~OdQZ5}V?$M}Tt#$#Pu&KU=hn|+ycQk{EDO}w4QZezz&x%!Lv0*2E_c>n+a literal 0 HcmV?d00001 diff --git a/Wawi Source/dir.gif b/Wawi Source/dir.gif new file mode 100644 index 0000000000000000000000000000000000000000..a080e1565b5d3a134153f55dee79355017fe9b33 GIT binary patch literal 887 zcmW+#FX-225Pp;eT~aJM3}+M3B#1I$4+`#Quo)ekNf1pYu{@x#rm!LS2i(De7GbEY zdL~hm7&Hq;F^wU=a6YeZ`f{JU=ilA;*VCtt9y`ASJMsR1e18N43<3xugc!I+f&vE# zB#}bSY7`+sg93^up#}{!(LxW#V8jSBVMs8bz(gQ|5sH{F4;fT&A`!_*MNY{43@J2G zh+>qYCK}O<R`i6G4r3H!8d#+Tna?yv^sv9V#PviD6HGG29Lk<t7Bwue$P#PVV3RHO z(C!T|;!N7Qr=i4TAcGmom~<Y7q>__~OlB%`QqIX#N=+8Bn5C@AMmDpRJ?TU(YLw%Q zuoSI8?FWv-&TY(omdqv8eK3s?J>Wi<wBD$oqDrb!Lrt~RBX7w@-8)lWkzKkGQ-KOr zsA9@{vvp5%DpAQwRZa;dM`F~eLKUl2HPxtQwW_DQd535InfBV9oXIgA=wOFBrhN;J z(~3Bq=wzolr-c@mOidTM*rl%NMmM|FJ?(4qLhNZ~of5bVVI7n2#wX$nSocLPmt0Ho zJ{-N1T}LM_>ssdR)0Q?jH!akfOmB39dfu)6weRZ>TVRTV@LT^0Y&(nDzIWrFdU1W* zt^?=pJU;*L#*a_`yZ_<Kz7xOiK78cHozD+m-ilvNU3~ZUuUCKWKXdco-6x-3Upw^M mA2;^w`t;`BkqaM>U%m41`R$*s-@J74*`v3AU*5VEKYs)1b%tU9 literal 0 HcmV?d00001 diff --git a/Wawi Source/download.gif b/Wawi Source/download.gif new file mode 100644 index 0000000000000000000000000000000000000000..a8711939f56de508f752034f5798efa26fadeda1 GIT binary patch literal 871 zcmX9-D~pz45IqZq6=j3iR2X3qynxjU$`O`z7d8ks(}>~^@E4q*prAnz!8XBUTFd4! z2v(DIt0t>yJP$tUW8Rr_oB8hV@7}oicne$jiT{s)fI$F3gb)MQNKoJ)fh1DMS&bqj zXiz{ACDfpSCR*sh7>pQUCJYG%6qpD^FhUU%<{^U$P9!23smKYLpCN@N3Q>$w)I=ki z(Tbk1(qW8ZOarU5AoH2Vh#vMgm$;tDVS-7fm_yl<%c6z_7Fl8q8*H-09@@PDMx04o z_cWB43}i4v8I#V#kW_Lqk;zPDPRco%N~y_07PFK!*~n(LvL~IWMU8Tt5tgDAsQtik z*tw0_&yu->x(}u?q6ggPlGYm)R8&bdYN)A}dgLwHsC#G1E3!*BVk%I<3RO&bZ?^7f zP9-W?smdv#<VcJ<Rj6W>s-_y%tXB1uH}CMwKhs{jlQTJ{10C#8$Fy(3aas|l6P@f- z=d{q`lBwxJ7rWFo-RNewx~F|jUWh%-tWyG)A*^Ha-S|X&0qefV<&tYj-iM=ivg_!? zWnIg>ecF;0Tc|ae-slGPyj%V2;@=Y+FvT_at^Wizcd)T}e(x~O;pohjgI5oZzrH+m z^6rc8e?qU%Uca@o_v6Fv+Y5IdJ$>@!_}jbfho8599e&z>f9dMco6FCi-TOEPzfW)C F_CGoUcpd-% literal 0 HcmV?d00001 diff --git a/Wawi Source/file.gif b/Wawi Source/file.gif new file mode 100644 index 0000000000000000000000000000000000000000..c79d2de02f7d4354621bd9424bf5b2b020a9fd74 GIT binary patch literal 871 zcmZ?wbhEHb<YN$ExX!`=1jmjY`~Uy{gb5RV{`?7KjDpb+7&#%J_>+Z^fq|7l2b2>) zd4hq%g@K(z#-qTYv6-1eBW6c{f>Rq0Gmk)mfuc*R5NF(x8y6nA^)T7%ozW0la=c%~ ddzr{ip;V8l`jKrs4x5*q?O`qE;^APh1_0eY66gQ` literal 0 HcmV?d00001 diff --git a/Wawi Source/gen_httpServ.dsp b/Wawi Source/gen_httpServ.dsp new file mode 100644 index 0000000..c5ff4ed --- /dev/null +++ b/Wawi Source/gen_httpServ.dsp @@ -0,0 +1,407 @@ +# Microsoft Developer Studio Project File - Name="gen_httpServ" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=gen_httpServ - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "gen_httpServ.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "gen_httpServ.mak" CFG="gen_httpServ - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "gen_httpServ - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "gen_httpServ - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "gen_httpServ - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GEN_HTTPSERV_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GEN_HTTPSERV_EXPORTS" /FR /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib mswsock.lib version.lib winmm.lib comctl32.lib /nologo /dll /machine:I386 /out:"Release/gen_httpSrv.dll" +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=copy Release\gen_httpsrv.dll "c:\program files\sound\winamp\plugins" +# End Special Build Tool + +!ELSEIF "$(CFG)" == "gen_httpServ - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GEN_HTTPSERV_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GEN_HTTPSERV_EXPORTS" /YX /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib mswsock.lib version.lib winmm.lib comctrl32.lib /nologo /dll /debug /machine:I386 /out:"Debug/gen_httpSrv.dll" /pdbtype:sept +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=copy Debug\gen_httpsrv.dll "c:\program files\sound\winamp\plugins" +# End Special Build Tool + +!ENDIF + +# Begin Target + +# Name "gen_httpServ - Win32 Release" +# Name "gen_httpServ - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\browse.cpp +# End Source File +# Begin Source File + +SOURCE=.\ClientConnection.cpp +# End Source File +# Begin Source File + +SOURCE=.\Config.cpp +# End Source File +# Begin Source File + +SOURCE=.\Config_users.cpp +# End Source File +# Begin Source File + +SOURCE=.\DeletePlaylistEntry.cpp +# End Source File +# Begin Source File + +SOURCE=.\html.cpp +# End Source File +# Begin Source File + +SOURCE=.\main.cpp +# End Source File +# Begin Source File + +SOURCE=.\net_http_html.cpp +# End Source File +# Begin Source File + +SOURCE=.\op_winamp.cpp +# End Source File +# Begin Source File + +SOURCE=.\Resource.rc +# End Source File +# Begin Source File + +SOURCE=.\security.cpp +# End Source File +# Begin Source File + +SOURCE=.\strings.cpp +# End Source File +# Begin Source File + +SOURCE=.\WebAdmin.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\html.h +# End Source File +# Begin Source File + +SOURCE=.\main.h +# End Source File +# Begin Source File + +SOURCE=.\op_winamp.h +# End Source File +# Begin Source File + +SOURCE=.\plugin.h +# End Source File +# Begin Source File + +SOURCE=.\resource.h +# End Source File +# Begin Source File + +SOURCE=.\types.h +# End Source File +# Begin Source File + +SOURCE=.\wamessage.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\Images\about.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\admin.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\black.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\browse.gif +# End Source File +# Begin Source File + +SOURCE=.\browse.ico +# End Source File +# Begin Source File + +SOURCE=.\dir.gif +# End Source File +# Begin Source File + +SOURCE=.\download.gif +# End Source File +# Begin Source File + +SOURCE=.\file.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\frames_one.bmp +# End Source File +# Begin Source File + +SOURCE=.\Images\frames_one_lg.bmp +# End Source File +# Begin Source File + +SOURCE=.\Images\frames_three.bmp +# End Source File +# Begin Source File + +SOURCE=.\Images\frames_three_lg.bmp +# End Source File +# Begin Source File + +SOURCE=.\Images\frames_two.bmp +# End Source File +# Begin Source File + +SOURCE=.\Images\frames_two_lg.bmp +# End Source File +# Begin Source File + +SOURCE=.\icon1.ico +# End Source File +# Begin Source File + +SOURCE=.\Images\list_delete.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\list_play.gif +# End Source File +# Begin Source File + +SOURCE=.\Log.ico +# End Source File +# Begin Source File + +SOURCE=.\Images\main.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\next.gif +# End Source File +# Begin Source File + +SOURCE=".\Images\Title Graphic\No Background.bmp" +# End Source File +# Begin Source File + +SOURCE=.\Images\OK.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\pause.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\play.gif +# End Source File +# Begin Source File + +SOURCE=.\playdir.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\playlist.gif +# End Source File +# Begin Source File + +SOURCE=.\playlist.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\popup.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\prev.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\randomoff.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\randomon.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\repeatoff.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\repeaton.gif +# End Source File +# Begin Source File + +SOURCE=.\server.ico +# End Source File +# Begin Source File + +SOURCE=.\Images\stop.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\stopslow.gif +# End Source File +# Begin Source File + +SOURCE=.\users.ico +# End Source File +# Begin Source File + +SOURCE=.\Images\vol0.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\vol1.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\vol10.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\vol2.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\vol3.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\vol4.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\vol5.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\vol6.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\vol7.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\vol8.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\vol9.gif +# End Source File +# Begin Source File + +SOURCE=.\Images\wa.ico +# End Source File +# Begin Source File + +SOURCE=.\wa.ico +# End Source File +# Begin Source File + +SOURCE=.\wafile.gif +# End Source File +# Begin Source File + +SOURCE=.\webpage.ico +# End Source File +# Begin Source File + +SOURCE=.\Images\winamp.ico +# End Source File +# Begin Source File + +SOURCE=.\Images\world.gif +# End Source File +# End Group +# End Target +# End Project diff --git a/Wawi Source/gen_httpServ.dsw b/Wawi Source/gen_httpServ.dsw new file mode 100644 index 0000000..c15cfe3 --- /dev/null +++ b/Wawi Source/gen_httpServ.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "gen_httpServ"=".\gen_httpServ.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/Wawi Source/html.cpp b/Wawi Source/html.cpp new file mode 100644 index 0000000..4855339 --- /dev/null +++ b/Wawi Source/html.cpp @@ -0,0 +1,400 @@ +/* --- HTML.CPP --- +/ +/ Written by Phil Himsworth, 2001-2002. +/ +/*/ + +#include <windows.h> + +#include "types.h" +#include "main.h" +#include "resource.h" +#include "wamessage.h" +#include "html.h" + +extern int frames; + + +// -------------------------------------------------------------------------------- +// *** HTTP / HTML FUNCTIONS *** + +// Sends HTTP header +void OpenHTTPHeader(connection * conn, char * type, int length, char * filename) +{ + char openstring[200]; + prints(conn,"HTTP/1.0 200 OK\nConnection: close\n"); + + if (StrComp(type,"text/html")) + prints(conn,"Expires: -1\n"); + + if (type != NULL) + { + wsprintf(openstring,"Content-type: %s\n",type); + prints(conn,openstring); + } + if (length != 0) + { + wsprintf(openstring,"Content-length: %d\n",length); + prints(conn,openstring); + } + + if (filename != NULL) + { + wsprintf(openstring,"Content-Disposition: attachment; filename=\"%s\"\n",filename); + prints(conn,openstring); + } + + prints(conn,"\n"); + +} + +// Sends HTML header +void OpenHtmlHeader(connection * conn) +{ + prints(conn,"<html>\n<head>\n<title>\nWinamp Web Interface\n</title>\n"); +} + + +// Sends styles and ends header +void Style(connection * conn) +{ + prints(conn,"<link rel=STYLESHEET href=\"wawi.css\" type=\"text/css\">\n"); +} + +// Sends a header which refreshes to the given URL after a second +void RefreshHeader(connection * conn, char * url) +{ + prints(conn,"<meta http-equiv=\"Refresh\" content=\"1; url="); + prints(conn,url); + prints(conn,"\">\n"); +} + +// Close HTML Header +void CloseHeader(connection * conn) +{ + AboutSource(conn); + prints(conn,"</head>\n"); +} + +// Opens HTML page body +void OpenPageBody(connection * conn) +{ + prints(conn,"<body bgcolor=\"#"); + prints(conn,"EEEEEE"); + prints(conn,"\">"); + //OpenTable(conn); +} + +// Opens HTML header body +void OpenHeaderBody(connection * conn) +{ + prints(conn,"<body leftmargin=\"0\" rightmargin=\"0\" topmargin=\"0\" bgcolor=\"#000000\">\n"); + //OpenTable(conn); +} + +// Closes HTML body +void CloseBody(connection * conn) +{ + //CloseTable(conn); + prints(conn,"</body>\n</html>\n\n"); +} + + +// Open page table +void LinkTable(connection * conn) +{ + prints(conn,"<table border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">\n <tr>\n"); + prints(conn,"<td width=\"2%\" bgcolor=\"#000000\">&nbsp;</td>\n"); + prints(conn,"<td width=\"96%\" bgcolor=\"#000000\">"); + ImgLinkBar(conn); + prints(conn,"</td>\n<td width=\"2%\" bgcolor=\"#000000\">&nbsp;</td>\n</tr>\n</table>\n"); +} + + +// -------------------------------------------------------------------------------- +// Sticks a dot in... separator between stuff +void dot(connection * conn) +{ + prints(conn,"&middot;"); +} + +// Nonbreaking space +void nbsp(connection * conn) +{ + prints(conn,"&nbsp;"); +} + + +// -------------------------------------------------------------------------------- +// Image +void Img(connection * conn, int img, char * alt, int dx, int dy) +{ + prints(conn,"<img border=\"0\" src=\"img?image="); + printsi(conn,img); + prints(conn,"\" alt=\""); + prints(conn,alt); + prints(conn,"\""); + + if (dx != 0 || dy != 0) + { + prints(conn," width=\""); + printsi(conn,dx); + prints(conn,"\" height=\""); + printsi(conn,dy); + prints(conn,"\""); + } + prints(conn,">"); +} + + +// -------------------------------------------------------------------------------- +// Image link +void ImgLink(connection * conn, char * link, int img, char * alt, int dx, int dy, int target) +{ + prints(conn,"<a href=\""); + prints(conn,link); + prints(conn,"\""); + + switch(frames) + { + case 1: if (target == T_TOP) + prints(conn," target=\"_top\""); + break; + case 2: if (target == T_MAIN || target == T_BOTTOM) + prints(conn," target=\"main\""); + if (target == T_TOP) + prints(conn," target=\"_top\""); + break; + case 3: if (target == T_MAIN) + prints(conn," target=\"main\""); + if (target == T_BOTTOM) + prints(conn," target=\"bottom\""); + if (target == T_TOP) + prints(conn," target=\"_top\""); + break; + default: break; + } + + + prints(conn,"><img border=\"0\" src=\"img?image="); + printsi(conn,img); + prints(conn,"\" alt=\""); + prints(conn,alt); + prints(conn,"\">"); + + if (dx != 0 || dy != 0) + { + prints(conn," width=\""); + printsi(conn,dx); + prints(conn,"\" height=\""); + printsi(conn,dy); + prints(conn,"\">"); + } + prints(conn,"</a>"); +} + +// -------------------------------------------------------------------------------- +// Text Link +void Link(connection * conn, char * link, char * text, int target) +{ + prints(conn,"<a href=\""); + prints(conn,link); + prints(conn,"\""); + + switch(frames) + { + case 2: if (target == T_MAIN || target == T_BOTTOM) + prints(conn," target=\"main\""); + break; + case 3: if (target == T_MAIN) + prints(conn," target=\"main\""); + if (target == T_BOTTOM) + prints(conn," target=\"bottom\""); + break; + default: break; + } + + prints(conn,">"); + prints(conn,text); + prints(conn,"</a>"); +} + +// -------------------------------------------------------------------------------- +// Function source for javascript popup about window +void AboutSource(connection * conn) +{ + prints(conn,"<Script language=\"JavaScript\">\nfunction about()\n{\n window.open(\"about\",\"newWin\",\"width=300,height=150\");\n}\n</script>\n\n"); +} + +// -------------------------------------------------------------------------------- +// Displays the volume controls and link bar - Graphics version +void ImgLinkBar(connection * conn) +{ + prints(conn,"<p align=center>\n"); + + // Play control links + ImgLink(conn,"/prev",IDR_IMG_PREV,"Previous Track",0,0,T_BOTTOM); + Img(conn,IDR_IMG_BLACK,"",2,30); + //nbsp(conn); + ImgLink(conn,"/play",IDR_IMG_PLAY,"Play",0,0,T_BOTTOM); + //nbsp(conn); + Img(conn,IDR_IMG_BLACK,"",2,30); + ImgLink(conn,"/pause",IDR_IMG_PAUSE,"Pause",0,0,T_BOTTOM); + //nbsp(conn); + Img(conn,IDR_IMG_BLACK,"",2,30); + ImgLink(conn,"/stop",IDR_IMG_STOP,"Stop",0,0,T_BOTTOM); + //nbsp(conn); + Img(conn,IDR_IMG_BLACK,"",2,30); + ImgLink(conn,"/stopslow",IDR_IMG_STOPSLOW,"Stop with fadeout",0,0,T_BOTTOM); + //nbsp(conn); + Img(conn,IDR_IMG_BLACK,"",2,30); + ImgLink(conn,"/next",IDR_IMG_NEXT,"Next Track",0,0,T_BOTTOM); + + Img(conn,IDR_IMG_BLACK,"",8,30); + + // Volume control links + ImgLink(conn,"/vol?volume=0",IDR_VOL_00,"0/10",0,0,T_BOTTOM); + ImgLink(conn,"/vol?volume=1",IDR_VOL_01,"1/10",0,0,T_BOTTOM); + ImgLink(conn,"/vol?volume=2",IDR_VOL_02,"2/10",0,0,T_BOTTOM); + ImgLink(conn,"/vol?volume=3",IDR_VOL_03,"3/10",0,0,T_BOTTOM); + ImgLink(conn,"/vol?volume=4",IDR_VOL_04,"4/10",0,0,T_BOTTOM); + ImgLink(conn,"/vol?volume=5",IDR_VOL_05,"5/10",0,0,T_BOTTOM); + ImgLink(conn,"/vol?volume=6",IDR_VOL_06,"6/10",0,0,T_BOTTOM); + ImgLink(conn,"/vol?volume=7",IDR_VOL_07,"7/10",0,0,T_BOTTOM); + ImgLink(conn,"/vol?volume=8",IDR_VOL_08,"8/10",0,0,T_BOTTOM); + ImgLink(conn,"/vol?volume=9",IDR_VOL_09,"9/10",0,0,T_BOTTOM); + ImgLink(conn,"/vol?volume=10",IDR_VOL_10,"10/10",0,0,T_BOTTOM); + + Img(conn,IDR_IMG_BLACK,"",8,30); + + // Page navigation links + ImgLink(conn,"/main",IDR_IMG_MAIN,"Main",0,0,T_MAIN); + //nbsp(conn); + Img(conn,IDR_IMG_BLACK,"",2,30); + ImgLink(conn,"/list",IDR_IMG_PLAYLIST,"Playlist",0,0,T_MAIN); + + //nbsp(conn); + Img(conn,IDR_IMG_BLACK,"",2,30); + ImgLink(conn,"/browse?path=%5c",IDR_IMG_BROWSE,"Music Collection",0,0,T_MAIN); + + //nbsp(conn); + Img(conn,IDR_IMG_BLACK,"",2,30); + prints(conn,"<script language=\"JavaScript\">\nvar shortcut = new String(document.location);\nvar len = shortcut.lastIndexOf('/');\nshortcut = shortcut.slice(0,len+1);\n"); + prints(conn,"document.write(\"<a href=\\\"javascript:void(weblog=open('\" + shortcut + \"','','width=600,height=360,toolbar=0,location=0,directories=0,status=0,menuBar=0,scrollBars=1,resizable=1'))\\\"><img src=/img?image=\");"); + prints(conn,"\ndocument.write("); + printsi(conn,IDR_IMG_POPUP); + prints(conn,");"); + prints(conn,"\ndocument.write(\" border=\\\"0\\\" alt=\\\"Winamp Web Interface Popup Window\\\"></a>\");\n</script>"); + + Img(conn,IDR_IMG_BLACK,"",2,30); + ImgLink(conn,"/admin",IDR_IMG_ADMIN,"Wawi Admin",0,0,T_MAIN); + + //nbsp(conn); + Img(conn,IDR_IMG_BLACK,"",2,30); + ImgLink(conn,"javascript:about()",IDR_IMG_ABOUT,"About Winamp Web Interface",0,0,T_NONE); + prints(conn,"</p>\n"); + + +} + +// -------------------------------------------------------------------------------- +// Displays the volume controls and link bar - Noframes version +void LinkBar(connection * conn) +{ + prints(conn,"<p align=center>\n"); + + // Volume control links + prints(conn,"Volume: \n"); + for (int i=0;i<=10;i++) + { + prints(conn,"<a href=/vol?volume="); + printsi(conn,i); + prints(conn,">"); + printsi(conn,i); + prints(conn,"</a>\n"); + if (i != 10) + dot(conn); + + } + prints(conn,"<br>\n"); + + // Play control links + prints(conn,"<a href=\"/prev\">Previous</a>\n"); + dot(conn); + prints(conn," <a href=\"/play\">Play</a>\n"); + dot(conn); + prints(conn," <a href=\"/pause\">Pause</a>\n"); + dot(conn); + prints(conn," <a href=\"/stop\">Stop</a>\n"); + dot(conn); + prints(conn," <a href=\"/next\">Next</A>\n"); + + prints(conn,"<br><a href=\"/main\">Main</a>\n"); + dot(conn); + prints(conn," <a href=\"/list\">Playlist</a>\n"); + + dot(conn); + prints(conn," <a href=\"/browse?path=%5c\">Music Collection</a>\n"); + dot(conn); + prints(conn," <a href=\"/admin\">Admin</a>\n"); + + prints(conn,"</p>\n"); +} + +// -------------------------------------------------------------------------------- +// Retrieves and formats the information about the current song +void FullSongInfo(connection * conn) +{ + char tbuffer[255]; + + int status = SendMessage(WAwnd(),WM_USER, 0, WAU_STATUS); + int pos = SendMessage(WAwnd(),WM_USER, 0, WAU_GETPLPOS)+1; + char * trackname = (char*)SendMessage(WAwnd(),WM_USER, pos-1, WAU_GETTITLE); + + //MessageBox(NULL,"Still going!","gen_httpSrv debug",MB_OK); + switch(status) + { + case 1: if (trackname==NULL) + wsprintf(tbuffer,"Winamp is playing"); + else + wsprintf(tbuffer,"Playing track %d - %s - ", pos,trackname); + prints(conn,tbuffer); + PrintTrackTime(conn); + break; + case 3: if (trackname==NULL) + wsprintf(tbuffer,"Winamp is paused"); + else + wsprintf(tbuffer,"Paused in track %d - %s - ", pos,trackname); + prints(conn,tbuffer); + PrintTrackTime(conn); + break; + default: if (trackname==NULL) + wsprintf(tbuffer,"Winamp is stopped"); + else + wsprintf(tbuffer,"Winamp is stopped at track %d - %s", pos, trackname ); + prints(conn,tbuffer); + break; + } +} + +// -------------------------------------------------------------------------------- +// Retrieves and formats a tiny string of the current song information (for /smalltitle) +void SongInfo(connection * conn) +{ + + int status = SendMessage(WAwnd(),WM_USER, 0, WAU_STATUS); + int pos = SendMessage(WAwnd(),WM_USER, 0, WAU_GETPLPOS)+1; + char * trackname = (char*)SendMessage(WAwnd(),WM_USER, pos-1, WAU_GETTITLE); + + //MessageBox(NULL,"Still going!","gen_httpSrv debug",MB_OK); + switch(status) + { + case 1: if (trackname!=NULL) + { + //wsprintf(tbuffer,"%s", pos,trackname); + prints(conn,trackname); + } + break; + default: break; + } +} diff --git a/Wawi Source/html.h b/Wawi Source/html.h new file mode 100644 index 0000000..37d0474 --- /dev/null +++ b/Wawi Source/html.h @@ -0,0 +1,20 @@ +// html.cpp +void OpenHTTPHeader(connection * conn, char * type, int length, char * filename); +void OpenHtmlHeader(connection * conn); +void Style(connection * conn); +void RefreshHeader(connection * conn, char * url); +void CloseHeader(connection * conn); +void OpenPageBody(connection * conn); +void OpenHeaderBody(connection * conn); +void CloseBody(connection * conn); +void LinkTable(connection * conn); +void dot(connection * conn); +void nbsp(connection * conn); +void Img(connection * conn, int img, char * alt, int dx, int dy); +void ImgLink(connection * conn, char * link, int img, char * alt, int dx, int dy, int target); +void Link(connection * conn, char * link, char * text, int target); +void AboutSource(connection * conn); +void ImgLinkBar(connection * conn); +void LinkBar(connection * conn); +void FullSongInfo(connection * conn); +void SongInfo(connection * conn); diff --git a/Wawi Source/main.cpp b/Wawi Source/main.cpp new file mode 100644 index 0000000..60c08e1 --- /dev/null +++ b/Wawi Source/main.cpp @@ -0,0 +1,299 @@ +/* --- MAIN.CPP --- +/ +/ Written by Phil Himsworth, 2001-2002. +/ +/*/ + +#include <windows.h> +#include <process.h> +#include <winver.h> +#include "types.h" +#include "plugin.h" +#include "resource.h" + +#include "main.h" + +char szAppName[] = "Winamp Web Interface"; +char szAppVer[10]; // now filled in automagically on startup + + +char mp3root[MAX_PATH]; +char playlistdir[MAX_PATH]; +char filetypes[255]; // file types which will show in the browse bit. +char pagetitle[255]; + +char logfiledir[MAX_PATH]; + +extern char bchars[]; // lookup table for base64 needs to be built on startup +extern char achars[256]; + +// All winamp needs to know about the plugin +winampGeneralPurposePlugin plugin = +{ + GPPHDR_VER, + "", + init, + config, + quit, +}; + + +// Globals for actual server (rather than random winamp things) + +LPDWORD client_thread; +SOCKET server_socket; +int con_port, hide_error, frames, title_refresh; +int show_other_files, dl_wa_files, dl_other_files; + +extern HWND ConfigWnd; + + + + +// -------------------------------------------------------------------------------- +// Entry point of DLL for windows; does nothing +BOOL WINAPI _DllMainCRTStartup(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved) +{ + return TRUE; +} + +// -------------------------------------------------------------------------------- +// The interface which Winamp sees- +// It returns the plugin information struct +extern "C" +{ + __declspec( dllexport ) winampGeneralPurposePlugin * winampGetGeneralPurposePlugin() + { + return &plugin; + } +} + + + +// -------------------------------------------------------------------------------- +// Startup. This is where interesting things start happening +int init() +{ + + HANDLE newthread; + DWORD newthread_id; + static char c[512]; + char filename[512],*p; + GetModuleFileName(plugin.hDllInstance,filename,sizeof(filename)); + + // Retrieve version info + DWORD versize = GetFileVersionInfoSize(filename, NULL); + char * versiondata = new char[versize]; + GetFileVersionInfo(filename, NULL, versize, versiondata); + VS_FIXEDFILEINFO * info; + UINT verlen; + VerQueryValue(versiondata,"\\",(void**)&info,&verlen); + int ver_l = (int)info->dwFileVersionLS; + int ver_h = (int)info->dwFileVersionMS; + + int ver1, ver2, ver3, ver4; // version of form ver1,ver2,ver3,ver4 + /* + ver1 = (ver_h & 0xFFFF0000) >> 16; + ver2 = (ver_h & 0x0000FFFF); + ver3 = (ver_l & 0xFFFF0000) >> 16; + ver4 = (ver_l & 0x0000FFFF); + */ + ver1 = HIWORD(ver_h); + ver2 = LOWORD(ver_h); + ver3 = HIWORD(ver_l); + ver4 = LOWORD(ver_l); + if (ver3 == 0) + wsprintf(szAppVer,"%u.%u", ver1, ver2); + else + wsprintf(szAppVer,"%u.%u.%u", ver1, ver2, ver3); + + delete versiondata; + + ZeroMemory(achars,256); + for(int i = 0; i < 64; i++) // build lookup table for FromBase64() + achars[bchars[i]] = i; + + p = filename+lstrlen(filename); + while (p >= filename && *p != '\\') p--; + wsprintf((plugin.description=c),"%s Plugin v.%s (%s)",szAppName,szAppVer,p+1); + newthread = CreateThread(NULL,0,HTTPServerThread,0,0,&newthread_id); + return 0; +} + + +// -------------------------------------------------------------------------------- +// Config dialog please +void config() +{ + if (!ConfigWnd) + { + NewConfig(); + ConfigWnd = NULL; + } + else + SetActiveWindow(ConfigWnd); + +} + + +// -------------------------------------------------------------------------------- +// Winamp is saying goodbye +void quit() +{ + // Hmmm. Did there always used to be nothing in here? Curiouser and curiouser... +} + + +// -------------------------------------------------------------------------------- +// Opens the server socket +bool InitServerSocket() +{ + config_read(); + + WORD wVersionRequested = MAKEWORD(2,2); + WSADATA wsaData; + + if (WSAStartup(wVersionRequested, &wsaData ) != 0 ) + { + if (hide_error == 0) + MessageBox(plugin.hwndParent, "ERROR: Winsock not available", "Winamp Web Interface", MB_OK); + return false; + } + + server_socket = socket(AF_INET,SOCK_STREAM,0); + if (server_socket == INVALID_SOCKET) + { + if (hide_error == 0) + MessageBox(plugin.hwndParent, "ERROR: Couldn't create socket", "Winamp Web Interface", MB_OK); + return false; + } + + struct sockaddr_in server_address; + ZeroMemory(&server_address,sizeof(server_address)); + server_address.sin_family = AF_INET; + server_address.sin_port = htons(con_port); + + if (bind(server_socket, (struct sockaddr *) &server_address, sizeof(server_address)) != 0) + { + if (hide_error == 0) + MessageBox(plugin.hwndParent, "ERROR: Couldn't open port", "Winamp Web Interface", MB_OK); + return false; + } + + if (listen(server_socket,5) != 0) + { + if (hide_error == 0) + MessageBox(plugin.hwndParent, "ERROR: Cannot act as server", "Winamp Web Interface", MB_OK); + return false; + } + + return true; // Server socket opened successfully +} + + + + +// -------------------------------------------------------------------------------- +// -------------------------------------------------------------------------------- +// Server main thread entry point +DWORD WINAPI HTTPServerThread(LPVOID param) +{ + + // initialise winsock + if (InitServerSocket()) + { + + //printf("Server is listening for connections on port %d.\n",ntohs(server_address.sin_port)); + + struct sockaddr_in client_address; + SOCKET client_socket; + int client_address_length = sizeof(client_address); + while (true) + { + client_socket = accept(server_socket,(struct sockaddr *) &client_address, &client_address_length); + //printf("Connection request from %s:%d - ", (char*)inet_ntoa(client_address.sin_addr),ntohs(client_address.sin_port)); + if (client_socket != INVALID_SOCKET) + { + DWORD connection_id; + client_thread = (DWORD*)CreateThread(NULL,0,ClientConnection,(void*)client_socket, 0, &connection_id); + } + } + + closesocket(server_socket); + } + return true; +} + + + + + +// -------------------------------------------------------------------------------- +// *** WINAMP FUNCTIONS *** +// Returns handle to winamp window +HWND WAwnd() +{ + return plugin.hwndParent; +} + + +// -------------------------------------------------------------------------------- +// Insert a node into a list starting from 'current' +void Insert(fileinfo *newfile, fileinfo *current) +{ + if (GoesBefore(newfile->name,current->name)) // newfile goes before current + { + //wsprintf(tempstring,"%s goes before %s and after %s",newfile->name,current->name, current->prev->name); + //MessageBox(NULL,tempstring,"gen_httpsrv debug goes before",MB_OK); + + if (current->prev != NULL) + current->prev->next = newfile; + + newfile->prev = current->prev; + newfile->next = current; + current->prev = newfile; + + //wsprintf(tempstring,"Order is now %s, %s, %s",newfile->prev->name,newfile->name,newfile->next->name); + //MessageBox(NULL,tempstring,"gen_httpsrv debug goes before result",MB_OK); + } + else + { + if (current->next == NULL) // newfile is after current; current is the last node + { + //wsprintf(tempstring,"%s goes after %s and is the last record",newfile->name,current->name); + //MessageBox(NULL,tempstring,"gen_httpsrv debug after and last",MB_OK); + + current->next = newfile; + newfile->prev = current; + } + else + { // newfile is after current but before something else + Insert(newfile,current->next); // AAARGH! RECURSION! Like hell it'll work... + } + } +} + + +// -------------------------------------------------------------------------------- +// Compare two strings, return TRUE if the first one should be before the second alphabetically + +bool GoesBefore(char *file1, char *file2) +{ + if (file1 == NULL || file2 == NULL) + return true; + + int i=0; + while (ToLowerCase(file1[i]) == ToLowerCase(file2[i])) + { + if (file1[i] == 0) + return true; + i++; + } + if (ToLowerCase(file1[i]) > ToLowerCase(file2[i])) + return false; + else + return true; +} + + + diff --git a/Wawi Source/main.h b/Wawi Source/main.h new file mode 100644 index 0000000..7a43431 --- /dev/null +++ b/Wawi Source/main.h @@ -0,0 +1,96 @@ + +// browse.cpp +void UpDirectory(char * mp3path, char * mp3pathout); +bool IsWinampFile(fileinfo * file); +bool IsWinampFile(char * filename); +void AddFileToList(connection * conn,WIN32_FIND_DATA *find, char* mp3path, filesearch * search); +bool GoodPath(char* mp3path); +int Browse(connection * conn, char * mp3path); + + +// ClientConnection.cpp +DWORD WINAPI ClientConnection(LPVOID socket_param); +void MakeLogEntry(connection * conn); + +// Config.cpp +BOOL CALLBACK ConfigUsersWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam); +BOOL CALLBACK ConfigAboutWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam); +BOOL CALLBACK ConfigServerWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam); +BOOL CALLBACK ConfigWebPageWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam); +BOOL CALLBACK ConfigBrowseWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam); +BOOL CALLBACK ConfigLogWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam); + +void config_read(); +void config_write(); +void ViewLog(); +void NewConfig(); + +// Config_users.cpp +BOOL CALLBACK ConfigUsersWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam); +void UpdateUserInfoBoxes(HWND hwndDlg, HWND hwndList, char * ini_file, int item); +void DisplayDlgAccess(HWND hwndDlg, int access); +int GetDlgAccess(HWND hwndDlg); +user * RetrieveUsers(user * users, char * ini_file); +void UpdateUserList(char * ini_file, HWND hwndList); +void UpdateDlgUser(char * ini_file, HWND hwndDlg, HWND hwndList); +void UpdateUser(char * ini_file,char * username, char * password, int access); +void DeleteDlgUser(char * ini_file, HWND hwndDlg, HWND hwndList); +void DeleteUser(char * ini_file, char * username); + +// DeletePlaylistEntry.cpp +int DeletePlaylistEntry(int track); +void FreePlaylist(playlistitem * startitem); +int DeletePlaylistEntry2(connection * conn, int track); + +// main.cpp +BOOL WINAPI _DllMainCRTStartup(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved); +int init(); +void config(); +void quit(); +bool InitServerSocket(); +DWORD WINAPI HTTPServerThread(LPVOID param); +HWND WAwnd(); +void Insert(fileinfo *file1, fileinfo *file2); +bool GoesBefore(char *file1, char *file2); + +//net_http_html.cpp +void prints(connection * conn, char * string); +void flush(connection * conn); +void printsi(connection * conn, int number); +void ReportError(connection * conn, char * errstring); +void Send400(connection * conn); +bool GetRequest(connection * conn); +bool DecodeUrl(connection * conn); +void ListArgs(connection * conn); +bool GetArgValue(connection * conn, char * name, char * value, int len); +void Unescape_url(char * url); +char x2c(char *what); +void Escape_url(char * url); + + +// security.cpp +bool MD5(char * input, char * output, int output_len); +int SendBasic401(connection * conn,char * realm); +char * FindSubString(char * buffer,char * target); +void FindBasicAuth(connection * conn, char * buffer); +void ToBase64(char * instr, char * outstr); +void FromBase64(char * instr, char * outstr); +int CheckCredentials(connection * conn, char * user, char * pass); +int GetUserAccess(char * ini_file,char * user); + +// strings.cpp +char * GetDelimitedString(char * buffer, char delimiter, char * result, int result_len); +bool GetUnquotedString(char * buffer, char * result, int result_len); +bool GetQuotedString(char * buffer, char * result, int result_len); +bool StartString(char* string1, char* string2); +char * GetAString(char* chptr, char* text); +void PrintTime(connection * conn, int mins, int seconds); +void PrintTrackTime(connection * conn); +void ToLowerCase(char * string); +char ToLowerCase(char c); +bool StrComp(char * string1, char * string2); +void ReplaceSlashes(char * string); +char * GetFilename(char * path); +int atoi2(const char *str ); +bool contains(char * echars,char ch); +char * strstr2(char *string, char *substring); diff --git a/Wawi Source/makepimp.exe b/Wawi Source/makepimp.exe new file mode 100644 index 0000000000000000000000000000000000000000..176933772d1cd284e377c4f16fc4f7d8c84f860c GIT binary patch literal 102400 zcmeFae|%KcwKqIJPQpntVFsB%)F?ql3r1};V1WrbflLy9BuogIkU|n|aU4^w#c&Q_ zo4|yVu{pCjkUrPi_CD6iqkT$SpVqcsi`Hr;!30o|fLbbkTC`q0aZsaR5+G#W@7iZ3 zB>w1oKhM4W<Nds%XU_h;*Is+=wbovH?UVAacbKdulS#l6kDE;U@TPwr{`-%AP9l5q zjHf4?o=AIX=05X^mu9XG-nA)rW7D_qY`Xnla=&@|-FJUm%KgS2xlQujxp&>2TfDL= z_g}uf{*D_mGt*s(rbnIczwxxJ>`p$>yLRvXBjT$X+xdIJUE1y^5I^47vHK}rZpZE) z@O*W5Ki-y2VWa$A-waY4pN81yHJMhJ1=H#~o8~9;PMYlI40Ec<)PWR-nI~^qLt#7* zQ`BRG5huLRzvSEWILcEw{3E>a2#@0@k)C+*T-Q@3(`*VoY&Nyqc+!8*&%-9uGykBa z8>Bn7O2~h37k&t!j>H?U<iA{#>9!l1*55AOZZchY1yUczgG2)dcqjgOfRG!EVy5OJ zNbDT<Aej8;LCy_Lo0`6f1U^=bnfD#Sd)z<Ie~!Gy)%Y^_B?i94z?T^K5(8gi;7bgA ziGeRM@FfPm#K4yr_!0yERSfu<<g(SUW|xh<-1;V20HPl{!h^Edu#Yxv_1#r$ohv(h z!hYW;h*r0re>}@%V%<$C`zVliTp4!Qcm5n%Opm@Vuvdp(kG>^Xy9$m*rYSuR>mdaE zA6d^Dfsd1c)5*Y@WZ;uzU@#dNN(P3LfwRfLxn$scGBA=1Tu25+lYuw|tY^#Z;XC8; zc(_xt5pdQ+CDyZL@);H_IQrB_81~RdtoJzzFu*)C6h6Vu*}s>G8g;C9ZS<t0AtPGf z-O-_(n$K3a%GhdGAuDzj6LyOI>I$H5g=@9C+U0DVuNEU_4d!=xOxkLfqjD7zX7?7m zxcvd|LYgzYJ@nSUiyvjbBit#MYQ-+GQSj;6Ff6bEWxuG5nx!kX6)v$-Uk`JIvR~MD zp2jdJUCw&y*DCwxcLR_ds^?Ru>K>zvk<nrN1CS1YW<xo#G44auR=LWj&qFiHerI>b z_<YJ0D;rIXVxzrLL@7ImEf>Qc`-dVqRn-MY3*Ps;yK3xhCqN}Eb3VozF)cLP!!IDN zG`sTW+ryod)$DS*&&lZx^>zD3(dXK3R+_8UWV^fM^xo3kBOZ@Qt(m=`#wAbcEp-hb z3ShI9vvJu53}s_LJONnFb-&&+=}$zHLni=)OBpsd|3Vo~+x{rJ%Ms<DDCfoIA1UYU z+yB*lsCl<?Hf?(Z<z~CPns+F}7W?jd(LJk~9o#p~WNI|8ir3^4j%}cI4&4ZcPTi8D z-kr_6VJ{r}54C<ax^}6zG+MOflhleb^=_BujaREB*YV|X?4%O4s3pZ^YRQUyzxw4b ze>wDK-+QXx$5zg+qz?QpwIrXF&Th1<@=?5^SS^_kAQ~-|1b|vns4Y+BEj0?qPOA6a z57>Mt&kOIOn6f`#EfF=RhJl+@zm56x!$+lZ=AVyO3G)}?bt{P4&H8Hk-s>s30%d)g zP-Z=#KJXywW8SY*cXd!`g)2vWAVkenH0yKm20dY3)^_g^j(SWrYH7AU3d$oYBV_O_ znzwTtGYJX+N`-=h?x<h7oo&o<e<Xc<L0PU;y`an``P4F}S|+Mx*}b0YENGwkMYY1I z`W?)l?e1%_sukG?`G;P={HXF)snT_=>KA%F`820$MXvr^n5q1F9xQDj{esT=ZcZ_@ z=*In{1t(Vf!zVy{|B6o7rkwDgy{(;s8$dZ11pDsqA`*VzzH<{LF0q9>?QIPRDsGdU z!IlV!hgVWoiLmJ3@Rrl4R=ALomOH`+<xBR6KuANqx+J@fFE~(bMXoY@t$HO^x>LP7 zSKi7hX0wv!=$p3Ie$!TysjP2U8Mbat*+(|P=*iTK1FU2{rp2lp%q14{+zh1mmI(LY zH8hlW$og`nUq49;q+~rti;^=~Retn6$11;mkdl|=Uro%|=hvS`6bzzw2}cwwaiZ{* zRr)br%7NJe>nP|g$;B+uoE3BeS{kH$rF(<Rxt&lVO=X#hAuYc+q!NKGPhenr_@FeM zWhKf~jg<j1E@KrN@R|yQw*3mwbClWJ9!3xdsP=1uC+-ZJe&(TB!$Ol%fC#MS5`l0_ zxIc`dv;y0n=K-^Pr(2gZ{CXwk8{o$lg5%&nzy2`z4MwV5u*%n9serfxy~WE$siR`H ztx#KG8ZGE#ebIi)>0hx!vtBy=%PRdvf@4Vn4U;FLfkr+liIS3R;Ek_zAkIWM%8%*} z;P>m)!t#7W_+eI-Azr1E?UYqG!6SQ1vI(^XoelNjgLP}|_jjT$@oS860@AZa`oPVq zvT4m2ybg3r>jf)M^w+SBBHQW&`0t7B&RdwziG;<f&)Lv!o5sqVMfF%doF5B*tSnZB zRpWH`ZMLvJEb%pLvx6O~Vt=V&TWy4ZpRpH|H?5~1MU<80SkI|=-{Y`;tlr~bYn*JW zgHm75JEyL3s)*d<Y{>g~t$L4>dC;^I6Pn6ssX9KjygEo95W|C5UH20PN^)ohRSIqu zl=!t$rV_tL5?kYZ;YiFwq?_SmC16>87bt*L<glVbN@V`ozEz3Dk{srl&l4+V`zjNO z{v5VA|8uJQXM;KN#tJ&oTW?7Yx;NQ>&{@{tx=`QUFo7+AzX?_Tf<d;}#g-NKom3ak zWs3`I0;*ItiUjtZ!h%k1McOF)i$OLVYrkZRn+py$fOMlLEdkbk?omwKvaJON5gw*+ zqzygt=m?LtC!?bjZCbB3tyY^h>;r)#cAMJdsaKat>f(*+;x%hO#jmOfqmDn)VrC^a zrSrVIdy|D72eWdrk`0hzTXOyS&9s;i<BQorODzj2gnC+XtYUp{$p!>W;OZ6YS;cDR zU#|(5N`m`H)2(?&RIr+Zs((ZCBuEEqU(8Z)G%wm{@`0C>V@a{eU^10z$!h(l7a#(s zfu`AF5U{=Nao#w!#!6gyeb=X=Q}+@3j&FkA!w1n^Nxn6T<~kcqtFTf`)YvpYvr4U4 zt*@fSQmL^rFiq*s{_9Z-uuZ5~aFlrK{avfjM_wN_^2f>JA<CQpk?g>Xqdca%zD_x5 z!76>eUeSfRq2rf#u62znoz`xH!;MLVggjv1a@DXU>si%YwtPe0k-R<``iBg*CQoIr z_A`uAITx2FJx%K}ww*0^X*=hfL&P0zx`%x?pS{GQ+T5=i3+sTfur>wR^7U-V>by_# zUQ!X+RIDPtyfE*1b;)YYc8}5z!~~ex{d|*<_dH>#BA}XOoh_NqKGAH!FUq&R%B-wR z0LpFytZdWzRp9*A!`4HUKE0kMWI5=-W<9_@QV|-pHn~_8;K*moeOe)UiA++Lc#fSc zI2c)JE{L+_D`rKJ&^k(!w<(iNWsA9l`v9W@C;AjQc7PYzs;WVKHs%%Bara-qVEz(5 zA*XP`k=Lyv)e9Dp4b(YVxrtThS5>akUp-CwqD}SYvlskKHnAw}8L}rJ428X-^#yBp zgIaD<y<$D<{!I5BmBxCgDTssK7jc-s0{REA2K^gJq)h_?d)w)R4B3u1<VsT!EAg-j zA5rYKe2#<_(=BY<3Lv7Qa8_?YTrKegSRsmC$13K}>I$d``#r3rFaWv@s5W0XE`23I z@PAGa{FZ6Tvms#KB4yV2^$2yfUsOxhu#z?C)4pQ`t<DF2L^{;3NvDb&2w+78@=AiC zerr24f`D3FjS^hT`ZbkHq2=CgyEah^MHZ{P0Z18igbm2|a~}7Y0`ay7I-u_a7MaZ2 zP9EGeh0A@+ZhOwJJ-~D95}pv%C!tnH&To*`g?jge(f|%u7>!QKpp_i~#LU0det(qp zLu}_AaCfN{8@ALdXRS@O&{2_zm7dSGc@`IdVXTj=uvi!{=R5W;&{xn4M2^Q{#dWM? z{;WRW(8nq~B#vp=s;~^*P;2tz{SOksf+d0P94P3t_Hp*)>n)+vR8s`1u|cWJh*B$v zQcFCsyAx3CB1}aD3*(AvJ9Z|4UIEgV8R{y>SGzEUA%k(OUQM|3797>u?%Row$`b=| zR3J^+D6`Z}BL~M>%HG4+<6w>8rX9p)IBQA+s4QyjqV)<m8chaQx;h;VjPc1W!zez+ zC#8G(ePi`6@<dWMKg-_UplKOv=!OXmffs!O1~)1+a1I9sS6ADO;bk{~$JG;$tK&Sb zw!5Lepc8rEa>^-ZRW+1{X4h=C#l=b`R<oY1%xB-;h+U<VeUBuQ_7Jf$>mm0sq-AfO zocCI57p*L8M{{B#_EB7bMpn;>Yd^Liy?wQ7cEmXcuc_>ZB<bAmHKjx$kSwfb14w4I zD|fSi-)u;(>sU>Gq}Vmp`r3TqT6_3sD2?ds`Nh}9?cpC%%tG5f+MYxfn-?!ELL`I; z_C<>$MdqT#3oY`JWME-3aAPtsI~kaf3`|P~GLr$p{X)|dtWRU37-inE)-D=@`_*kZ zggSLg5M=*e%iKtDdOYGx2N})g1FN}?mCm2_TESp|&83ZPj(cFU9dBnDA<iClk+dqt zwo>0>Vb2q%gedFos06k#Y$q7hpGdrq=TaSKIhUf%C?vJPsYIAY+WMjOlRUkYwojkp zQY(&~WEJ@ZCnD>nSZI-Tk6&S5$fcMc+$R{0tNx8@$vXA!HP8S{wz5O+1DjTUntR={ z;Mat4&b(d%p^jr-DO+Y5tj#QCky<{Luhn4Qq1Ll>Fu&P~mRZS0&gH_u>VlFr_U|<# z!28$`so2OKB95nRuv`d$@8p%NGq?>HUl}-GHn>4mg7G~xj`3YK#`v=TnT(Hf5a!=d zR&c_N4cEq}0J+J2e|O#iYoF3N3YADL*@z(*F=9;aSGU}f5Fh`SvIAX!?`@PHLz|pB zih4_KLzkxT2_O<(*xOztPT^l2K5A%BoX_MPYBW_s_32CjVpD-ypXy(&UvdT|Cxhr% z5m&|@1@QeERWG@Xi0OA|mrp}JGdN|jB|gR~9bd#M9R}t(t6ZF9l$@1bWR&;OOf7Xs z<(vK?Pn<&Fj<K?Dat**q5LIkgycE)dO#_2XXp-*&*#09h8xVn&Y$z%NVrVje6SZVR z|C5wM!;;pq5;Tx+Kp80(<7^iZ7?y1ghE$0j4Kd1x+%BXu4lDyF^R&K2{9ok>Bsob2 zB=D~pvCq*y&rj4o7eU%y9MkTP0oE9wm#2U^qdaXiW<3vv0Os61o;9z9{z<%<R3*-w z!JqYS0SfRD!KbwoKw1Y0X0_dsfpEJ7v7)xmM!4W$Zzvn@y|hQ{$U&$#<ic+!;=Q4K zgpMN=P}?5|Hq`bf@Y@@D48I~8)$ukNJx<(RV1J4IkN>GFf$M@nZ3jURQ1g{eVW~W% z?I2K|x^iL~f%MeW@oDPs9;H5i_b~t6%YTVN0=+wS0$pYpfydNsV?WEmQ_f~?`v$sq zRQcJ*$KJtqvL=xBIDyYLIwL=#Kzq)O2(zsssWZPtLW#Q3*>3w9cA)HW8e$Rlyn&}2 zra<1|hQP7+l%CTnPp@AaP&=rF*fi?l*js@#9#x`N12-&b(lnDb^Uh02Wpfai0EP_O zd~3#bQ6B_n9rn`1hs8kJebj7(|B`Z10g4ujV5WkV=3rzO0oiV|z{=twxYQCSyN?<P z<Q;gL!~p@>d0I8n)CV|-mmE8pXqLd^eHuL%91XCnYyOYNv=6-2l-K1xu*ZeiwtBA7 zv0>7>0MWD53ftz4JVb%^oCOH8dcqk8r&QeroVf|oXAPWHByje!wtD(N;FzvHz(G{` zpkh<Tz_A`Opn-lp9X%M3JwQa2*9QTnbY&>#((D>}zyV1dW&gj&lnvMcZhG${G)=;^ zHPlboLh-$mlke#ZI%`-(bNJvkUuav7MNaeUU&WCKDr@)A>IcJr4w%(;(PD>P>34|u z^=7om9-yVhcG0p^y3&<sdh|VOwBHI@;6AivQp~EAr$FCn5!~mtTmfwZ$1hSAG{D@N z>MFnf9q>{Rd%qX$xepn$Y7ch+R4Rgr)JiSezRr#udy7*Sr%{l9lDeiK4C-2};zg%3 z4{(xqW)OXGI-<p3tjR;5Ev4)9MDqF^Y7agNst&q-;lcP$!A5|MV*k&_!BZmup4Zvk z;<3L6(m0W`dS_%8r*>N&!pK^p;`IX5q=z^>Idce}hbGed3$*&WPpdpRFt+-@9QYu| ztv)AE?(wnva_L><1NPSg@7e>z5H-GeAX9{g!<ysQ{{Ry=<_%jzOya*e`6MRx&dMnf z+}&Ylh1oT1K1^Q9OL3OX%4`LlDt3161L_8sL%pvI^?L7Hf!{^o6x(iLe-0=MO_Gc4 zq8uoljv}V3Mx<@mYCzW0mhVHBDV7@OU5q+lYEF;RCAg!_`;A)4SxZZua>3G);$_^# zP&A<dNX+k<(M&3D#vrR@&_y_XNm*pTTA^6jeMD$^QI)^P8gBkM!43ABt2PRZga6~a zE_S@{ymH>$Jf#X-;aiC_?6)mPLd%ChgOgNeP52&OIYtfk&>9S+(OkoJ-bX_!^Q*fk z#XyG++byV_aKe5~$!KgD>r#1&`XH~tc2V|H7FBsbeT=6DnDaLQtMjMmG$)`sB5haF z5F<Nppx44^(<H9o#6)91jXf+-H`)m}+S?{m5!7=9)D^$6;OD0n1EwN~MLMd>1^Bb| zZxU#H)BuXi)7rJPBQSvFV_0Uu$+`$ftNf}lLOmTwLG#(IJ##T4zpqB0O=|ysr?H0+ z#|cZwBa{>p#KSs>5Ng<Cj}xXe+s*Dnm;tAK_fL$qlHD?wJ<(2RVvn^`5g_3Y0haTd zfcsdJQ=S^RpU-pT!Py)M$F`V@xE1k<WZ~bS@E@q~SLI70_w!Pb2YH=^$2R9-6ge1u zPT!mA6CKpN0gwC8w(kLZIXLbxdWFq~ic*{xLtHgLPArLw$^b&jDcXj)Xoy%60#*n5 z$gY7w78YoM1s&K&I+>4BU9_=8)A>)4P6M;-(}X}3)=`-AcMuf-9kbca9enJn#4PN0 zlv>g{N-N5){Q{WR+I~mbn8N&hl$zIL9Y7=-&CJCx@(Vg)SxO7AVg|!*Gl;*}<9>cy z23VtmJzuKQ3&({p*f5Lx<?XjYS;&PhxtJg+h`SFrXRxz*qeykJ!e_B_WY*r+cgUDy z|4om12WQ(@0?=cxBGi-puUNCN2rV#cFOp`X9E`L)0j+S5h**@UPzDs_6R7rZ6;T>M z3CHbiuK*V~QVb~1a3D<DPX3nDVLvPjC<{!|U?6U!1(deMHv>=$5*i6&<wHw2zC9X# zpIxxGF>2^Bo(?=_6Kr1WN(ocaH?+q%+Bit%BNfW~0!NsHZSi5k`u6!6@J)46-Mtvx zhj}_h1ZMw@&iJ^k&(rW!9uBCtU{LwAlZF9b{snIqeXdmA2SC)j95Plz&cxNg^;Mg4 zDwmA%E{k82T&a1l)jSJEY=YSiqR<ks4)?vwdSOc~8kJ+zO}Ml9X7q5Kw$)4=t-=D+ z>5Kqdy+W*HU0jt~><g%?S2*;q!nTavZ$M2|dW4m7UqijJf5Pc?hjG5a?sEcr+AdO; zNjTKt%^o0Op>ew!35O+w&RwLsqrf0`{%C67B}gPQoZ}ZB6K3pz%}}OIa%vei&@Jy8 z{8wAynF2c)XTeaMD=`9FRlz}jfR$NbRDd<chS`UC{b|xJo`r&KlGC4#P#A2)1aY4e zK7n(uAEn0Q_MJaP(voTwiKGW;!BkRH1F*}My3avBh)Q?6M_bYZ=4TYr>tn!`G~EqR zBZ;7Do)(BJPf%8t5>MZrhS)xeO+w%q1Yj^lY1n#g7eR<!hOMFP>C_}hvGj|eVl+9* z^PpwC?cr}@AaziXlA9sYzpGKi!S$mWLpM>*W^AiViIatw>m<&ExQ5<+Q73`0-zFxt z5z;`~oeK<ggx#IgM!Z}d`9!_jIZ-2-&Kn=odX;F(cqN>=Zy<)IE&itgKv*gJA^@;# zpq1G)??_TB`&<k_9ozO9t!%*;YGr38;$Xa1CK$snh{N)^>k*=<v3<}6IBs-Ce#ps} zwQ=(O2b1!-isGeT2-2q%#aZa-dqz+9-$x52K-;*9np&y*f_-NlaYOJ$V?CD9g1m;H zhLzG-j>~90(w0@(Plu}$^zo#AR&auLTWc)j8IW9KPmNn)PeqdCOj<G+@6LRfH<ZrQ zQjl^kbzcqP;6$d2#R^U=4zL;SK3aDqv|2=W%-;4k)~fq8yY?6X$G5;_Tzq0LjqN$U z!y9$KyzNec<Nm$09N9VS@XD~m+sAi!TgP_A3+Nzt&DgHERNaal-VE9m?=v*s<gWN- zXuOG?u(tYZ18N6l12MU=%L42f-bvutyNM30hmF1QG6LBit_52AN5E6a03M~y0@OWw z+n)a~Kz|Xvk3Ts9y8*&(2QjpNCUP$gU?R}RXK`x)rktI;tzPN6kg$9FC(RzWe4g2Z zwlqB-8&;3RO!t>UuR-hMtR9yB>nZJAx_$RFQa{J2@A0QU2R+2$|JmrFKE4<|ng6Zm zNf?Ea=$Q=+Ohk{hfAU1EJo`CVA#wN5#tQZE#aKz(wpQu-<iCq(h9(dV<a^gA<0xiQ z!cGPbR&W$sLacq+c997}#>WsJC*v<NO9(6%_@EPVekJO;h%eg1Z()y2vL5=?c%2TM zQveSxILJE4X2{JW+5VdFQG44)@E+Dd*4=`5!3n5$%UDMTVv(FFMd3I*27MUqGVmj4 z>OZg;MExvhq(kn*+Zu?wN<T2M*I>yYF3K%{@S9267N?L8%^Ju|yvUN#VOTOQrDet$ z<wffvEEykYD;5p}RBoW`C*wUd$R8Loi8pM0x&P-#EjVGo5&1Vdpe-0A5dbFtlT<MO zKXKSTpdE|*rET|+VCNFxCjv5AP-K540|&Q!!Ure9O}XtbaIA4INg6=mj>BRAnvwzL zk0!Ev7&tz_CdQ$y$QU3+FafSHl`$7}7+{a_?gGdD!vHjpwwI(!lKHc_KRNz$kBNNZ z?jufb`$^7kJ*Gc$$oq^Md4F}kux%|2GC^*T`LDryQ9KnS#1jmVNpo!ysFkg8n2}AJ z(qZ5EDIIIaGTF<~{z-`bn4f49#U*&!(*!Ce{wEefeco%>pEeTHU;Pt~;@AJHDCS5U zCshkLrVYs&yWHr9@cfxUFy~KJ>;+~)*=+`9JAhe(Ue6{l`!VRYmJM-h_!mfpi(=m} zhF|%4QbAii4Tjwh4X6St*B^k_F-d=D%nA-tr*-E(WZ%(2hb&`~;omJFN{&p9!*37{ ze?Zrm|4BSB2BFE@|19R<Y87A_!BbzSwv%D?A{XKQJAQ18aICM;evI=WT2^$5VSR0> ze7agw_EN^Z_~CvU1@8ygY|6cW+}2Sdt-6-W_t9J1`Fm<4uZLQ=5xZ{dYi083=!X{f zpBwBCbha<anP|?X^AizEPVmDW;3MT7b4E{Jf8WVv;iKCJ`gH8yh`&`CSXItCWDhve z7z^^Z=Wrfm`0<VBL6b45+@TMfwed$fYrB=RV)NYbjTmhd99(Rikbs#bY9u<14jXfw z(0VyMeuKX$=frKdezvWIU*Ufa9(axPZJP!I&A3CGn=nG+s`a0OoeV#;vlC$&lnkXk zhs>s(0Lp1t%*nDNEu}4jU!>!eiMyItXjjL#dXXbVgGUqFJe+nM80srHS{iv37Hc}~ zaN1FdAIcmlgY)AIt;~!r992ehk?i)Ig|Heg@hpYWSblG9!?*(~lq2UM(O0RrV9W3+ zX~pevqE9cHk~~l2=S2?kuW<Yk1ZrYEHQco5(=RisM@Plwa{t&VK;<62xd<NbZ{rt6 zFZY3(<{<fk?#o5xn8n)3GDq$yGCe}2V5hj09f`h`Vm+b>9dI=SP?Pu(frxXh1JO5A ztOqn_d-N^KDt%8T0SjC{Le*twaNqhOlfD<`FQhh_^~Y?04ZD=!6G->zbre00(ZO{q zJNOutbr@y2H#zN+aC(_VP=c^Oeku&;qVJ?wKW?=6sx;^C*gWb+D}3Peuk@b*8CCkf zl6u641s7F-+^5;T&$6hL+7=NZ8TU|Q7opxmS?q}p%7PQ{lbS8GZ$>y)so8c7^+(U8 zu&$^+LtA07k>yYCB6wGW%MY*8pF|itIi{2O>vAkw+Mv)O6nOzx>C*@tKTNrL9n3jZ z`mHby`EkWzZjG;6zy9TTyhh)FBo0ncK($Z71hb{%i@?Rr4RvRSZ7h4WYjvXbDog|) zl4k3u)O!E}z+IypjI(n%72fap_}4>yOW|U3s3|?PV4ak*)O~2vAcvud9pPZ`d9F03 zAJeVf-%7x((!WD(!9c(=&k)A=oWSI4J+NmOacfV*;`&D@RHyPRl^5eD%r&u;@cU9) zwf;Z2T}ueI(>&h~BUF_>$1rt`n{8U19Uc3~HmpB@+=mCyC`h!X-~>+Bolki{0x-KZ zyRuIID)1`^S4VIlP-Ob0z61?|$k-FE^{A`ublrx9;19-u<Vt-6s~`fu)%~`;4tsbO z_RQKdyZ}&B(8;k9ddAj(8tHQOXR_KK<XNQCMA~?@qQYDdghP9b$7C_$HG2zlrQwLz zw6NRWwgqgZ&~0xc%TnPidmCNZK{hY8uv<Pezs@8tdR7PAn$cdw5jnJQnw+!n1<4ul znGx}u<;hB?Md`6Dd_g{0&>2g)yi++IcX!*vivebPoyq9)V&93Tf+x|ePk$QLKw4Ox zva4}>b+GLl!1<HF1rG&ZL>YYwrW6MM{(~@TCGZv8j|}jfiIs(KqV&B~nL@$Gsq!mO zaH#T5s(e33LvSxLR_UIx%3lduK|AQ2>M!7(Q~jM(|Ncb%6;$6qLNJ63pKeOlw}*d= z$z~TYM|_5!6PiGIeaWb`uk~CmIQ8cAU@<E8pM%p$(1TF5uJMtPQ+ImMM0tNj-gA`4 z=ewGk%R3u<`wp}>#QJ!{yjgZ=rQr;E$nc&`_MLb3AC}X5FgRele;fKqj^;R8_vttJ zlk<?ohU+^RejZ3WNTJ~4D5l@X>pS~zq51~t1|LO6rT%esqP{&$nlK2g@OnA5eVxl0 z`$plq#O$w=hB>NnQ7gN8m3|mp7%L=~4;D0U(08+K>N@F$=N?A0JOhQD1|l%Fes<14 zz)J}Pyu=XzhUN4H+X%$J8%wqSe?mV?f=Coxsjp0eDCYz>Qqg_9sL-2Y!i0eWO#K0> zl%Nt~^Q-jBl9lY?CgOe<F^zKBloAD4=Mt{DU|w`h04tNSIHX`?TAPicfQDY~=;kS* z`RgQGS)v7Z*Om|4voRex;FP}Vc$WCEhi;^ef?>Y_s0NK3Fa(t_+s0d2*u9T1B&X~n z#)GEIP&v_HrEe8l3t~eU45ExrzlM%uSHQq`zl*ks@GyP^u9C`rTsM%{eoE3LSSrL( z<(by#0LXq7`@RUcS5^9g#e}w2E<Bw{fc^0-0RY2^D!dB(1JN~z_Fs;>a}3@jtAews z(h6Ql+=qs6$X~a%bw9CA^2c=ef+NIful<4&;9r%&lT<?d{1Rvm3_Q`G!IzW2t*1!R z?U{Wi7EtDO_>E-c;}^$gPq=cBQv=Btq>uFk+m3qZn2XNra@!#~^<wPSkqgRlHA07( zXGBq)uZwFCeV9VZ{`|I1DT~?>(4dhkB3Ie(pu`ZyYjCyG;O1i~oK?Mv6qZTE2P5p8 zgTNP;Nw`Sx3L<=7(0sxBK<zGk*vM2>aKaFpu&-OYwRY+dlah-Ot<o2huxNH&$JY#B zN$hMXR7Vv}8RICd@#%N-F1a#se+Efrbap3o#*=nhNxuLvtCLBn$?msOLDps^K@b0* zYscD9_Ls5yGkCJT4m6ekS@5=YJ5koH+jlMpNvusWu7n6P02}y(16C6xcB#J#VF5LT z?)}uY?x$HJyGQFO8l%4^7z)z-<9LX*xtvIX1f|<gmj`d7j1QqrAtgavt^27`H+zPc z46Z{7R*H+BKcrF6MNeEpEMY4JFcz^gxEk53bh0TB6XB(O`i4YNCyHJkETleWd|n@Z z{oIh@%+M)s^6M7NJIf^Xf@P8V!SMl?DMKESY~wN}_%LQnUx)^S4<cm9owI<MpqtIR zY@-s7!GGd2!}9B20rN#Nq{htPdMY=7a(+FGX~EzoBEhfE0pa+9E2!K7Uak)1f^#Xp zkGGF=)rR^6&Z^ld<&>=o9?&f!Y%^ON3mODfK7-4I4N!~W4in}q)8@v_g^}j9ti~1? z>JrVem{%(FUqU08#8!&zc-~(IyR2&6ur!Cg#{LTZRQdZ1=KR5JyNgVN#jgt?X*TO~ zAK7$OXkof+jeCa|$37bD3dxuBrp*3skqKK?lX4*5AEkH8h)EWicewxehz*w7%n74< zjSxO6i!-Z-`~L?r^5A5SOAxFlI-H`sGegS>Q(w_{tjs!CoQe(`8!e5dxO_(M=1j!q z_KwI`uu_qgi`E0~=%$R&d=84}0Vt)Jxv{xae1vLzA2s%wKoJm83%uf%Ot#WC7!{?I z!RH0Z%1X1TW8Mv-afH3%9PbD~X5}N+DE2Z3yLD+g6z@*i-0h3Qo|Sy`SCI@x(cS1l zl8qj{4+{nzb?@2Qfjv#9WQiXMIy*h4poky+Fvc1bC~BhUbA%zP4_%(u#(syuqy#fh z0A2HhnnrWOf<+sFU3m&J#CVqTVUNid&vM{}JH0j&*#?~Iq75k0enpT97VeP@7_MTO z8xitr_l&p)nx?W;11{wQ!99<PY<j;wm`gxq6HwQp%i7xDY)WuZ0{jJ$5I(V1rjd&( z2P2+kd)Q-Y=;m8oH%5-zG|6^*gxLG_-SK%HfP!l15L#%V8*mCIw_JrJK_@T!aA&PN zZ9%b1l&E1rALLlBmH%4MnP_+3x^ESkw&40>&*esO++UTgjpll#$F96H;0M~~<!(nW zS=oT5zMC(AT+E<f_3Enkq~>+>dQUAzUp~!ylI}@+-^K)O_vwG*`zl+!{B1U{6?1+v zlnX-}3i%pMx^))8i(BIdsl`gZpltTvv^dbR+A@MudyvWB<Vgjc{V$<yCOZQ|B{rK` z5?Kkz$r+o}>vfXPIIFO=zDd#-E2)H*{8jGb?0l1j4cEkFF@Ce&c(utiXPaQY1+$*_ zH*<>^D{<F3n@X@7#;5}pW7PL5El#+svu<3r$3>&_dFNslcAht}*`YTAT2xnt<5H>F zE9M<{_cq<aT1H}X2od&YNj<y@144mX=?0?klI-PxGTgbH-~@DV$+m}mKn(LbIKe9w zHehiCz4YesPHnMwKZS`pk-ZE=w2Y|bBFDrpJ{J?fILAcHilv&s(zOOIX2A{ptbvQ0 ztMuDkz(k9fM27WmG=k;sa%a;GG<p`5(u~nZ^SXRhag4igHXk>zdNYmvYjbd+>Ub<0 zmr}oi3>xh0b}PoZBwj9JxJrv?vWGWM9Hk>B@Uiyd7NA!gl5Mg7FpM_J%kaUr?e*Y> z?tyr0;a)|W>(^hy5dCae{}$E=LGU=ZGcX_SY)L`+*d_c1C~kP_V6!GAkYlQ4y-L6a zjme;Ae2c*4*B`|yuMKzlrF5U(P2t*lEchfL=Ws%Pk^ie)L_|d2G-z_->NLXF(@)sU z(>I;UJHYmb&FoDkGLPU(_Cd~--v<C_)~|y$Xr1w4)OQb-WO^h!fqo324;`<qzr3@X zZjT$Dzy&92Fla`1`a)+d^49{t5Y5t!tVCqD<PC@8+pekcQQfn-eAw<@84mBZy&-9` z>w;Qhi%lX_DlY(Wq7o2HYH9=Ph6ND@8PG9YvayZ|266TrUog)D_P(urj|*#;36En6 z=fg#CFsexTU=j|qZ1?Fm5GSQsykbf0GD<bcQwO6KX|hkBn#htZ8N(%R-dOYRc}3PO zfo917WlST%r%2z1#mWhX#dIZZ1}5Sbxz6<=!T?&%^y|+<n>Isxs4a;5^^c)4qgE}3 zHOVzX!*cF5OOCywWE<Qs&^_jC5+*g^SWZI5O;DUb0|f^GtNjO2_~ykjC&)oeKEn*g zmkL`avnjX_B(z)NX8V(!-Ibg<J^-I{Fvo;1w*5C~R~bFY{<<Y|0<SBGBX!HQ?khM; z%&gLX4>`+*Yr}Cl&)+B}$%ptL!(7Q%DT|2znxsqp`cGiAAR=(ao~mjz)#!7Lm17_Z zoBm;g++GBnwi>XW@Az?f8n#R4P!F+gV9y~>!X8Qfc5G%OwWNJg=~C%x=*@GCe0Uzw zg<-i;`MXuhGzuX1tIOrnv_V)~-_SkOOASevP*r<d1YsjZ{=lfZ0U68Xb8G8SL2T$& zrz^d}Qt3BO$45uEu~h33WguSAh1&-`!Y@o_bF1{%wxiN@ZG+O4LtR*kCdo!`Nc<jk zdMq1vAK-+B(B#A|i0Lt*;3#jipmV8|4p-Dk)V@3nfaP!!MouwUqF0A*F-f>*d^gyL z&);a#(=bDgmSAzG2QU3RKK_Zl*B(-JSf*nGiTP%7L#5k+bHlemV)^x(l67A~Y3w7! z-|@Q78FgvBJv$7w6bk-MQpbm(yk?Vb0q*66777jSxE|*kVK%N+fSeOocj2%h+o_!X z6A*1}Kka)lQQ07s$yNFfv1zM?P<juz;PhhuUMGT8`i-zuFuj&+hdYtrHsortzp7fF z3GvQ(m?W_Cu{nNyEjD(XuHcQkWTed90~X!mtE$nT1sYJn!L1%xPR8A}2}JrSflP!b z6-{hqtI^6K@G)h-Gd5#leUN98l5>-kd_|IyoqqioEEu3<d-w{lfc`1O%(2?x<-#eL z)>%!JKQe_V78G(<<Q_AKWF@xvI6jR`Dw%&o$^vC(fJPBaZ|jslsbAXwb%PQH<e0WC z9=YAp_O>)T0<SpB{FCzjNRbsavLo;Tiy}e#TkN-Bm}?s%UHyND@YYJ>h;*}F`X%+F zg;cRRv4)-BE?{Zh951)|rE3{<rwU<fI-6{N(p;oYj!p9GkK|(EljNEP;x9~>QczU> zOXw^3Vo-g<+PZFcizt6oa3VH<W*g%{2S_M*Ti9b-zXwxj@~v0VJ&<?`cS>s1JM?(g zY+wvWyRWEO9-_?yhQF_xS%_HlO%XR7GUroJcRVr|ZzwuHg`k2clEuax{ol}7t#ZeR zNq+*Nc$N#TJ+dC^q3(vbdqhGF{cVu7ehvNPVEebnhqOml<Hr}DSB6)7UNMzQ!A&8M zl<Ixkr_V$=<~;=om8O=TgiU`vpa#2R09Zb$Perz}s2R2JEe!pY>(DW2g2MGCQxIzy zV02=cknT8E=r_qie?y=)QHqq&Zsk-lnQ()&DD)QUc%T;KB{p8J{|J;)tInfcMQ_S& z7*sAA*Y2Z|?tx90g&?k!$?=|&l=MARM(Gh#C@=OF7N!Gg_I$J-fP`6WGQP|Ko>5Hq z&S+oH^0lC_kM1712eh0Uzy}5v%%eV9Rz0^KjT!K~j~i^ngXb$o|LP>Iop&GIlpTT* zSrOwso|JTES31SkDDV7jFe#&@=0C<#8E+GgYJ=NKn3d?}=193|Flv@=z;;H?0F-k9 zC1mN9tQRN7*h#%Pg9&^mr3nXEhAN_bdznz`Rk{WDX!FysNASTG9*=8tkIUuZ6FntD ztDMp}xF(j)y36R2t<w1k8qP<<Y*>lMrRg<e-Priqk9rGs@^WgZLh!`waP5@S5fozr zenU%?^Va778Rvk<v#vuUv{se<#bh`Vs@xnC{+dmj*a0>WJ<GR#g&M&`TR;0?@r{C6 z^22&_1Lz#80Q7gh!^Fnd6kADbknfvv0HKE<Jg%H4wK}U15xTPsT%`H*bfS}3E}Ilu zpD$d{it`259djyIUk9oKH4q=C2BGJT=?x^<FMtMV!nU-I604SJHD|PrX5WSIHyh1s z;wkN@X{faFDy1+SqV}q4G$Zs!($wVKD*X&r1KLq1$y2owXCtn8i)!i`6&r;T0Z03{ zs`c6GHc`Drtrr5V6*kKhwB4|_o~vb`IKkwHi!nA>(A^vo_;V$UJE1`42TCB@q+A0v zQzT6f2(=A*P-2o#|0+r#32dYF6xkJx{Y$}MWJYP*3D^Tv`IOpXv$vfgdq?>|!O<A@ z(F06AQgC!Z^(p(#H;^7WpW8e&bbjmh$@XWvBcYMsdQ8emJ0aEnY+Fwbcu{m1Hk?VS z_lW&_|Aq>2SNP>`qEPujT&;dltv;?+pH!>gR;x$U>Nongq68XJ^jyiU=vL`^MHi(R zWo6POh{631*-H6{*zYp}LVu|dF!$erK&X5q)K4Znl(F<*M=9s8m1kjh=hHtyjL_>n zY1b|>iU>o;5$zWc!^Y13><gL@(u#|Y#QN3hf&TX)R;l`xy!w;L>H~J|7;*^y{zC|8 zf=V?}P4y1+@8gx0N;ibg2c_K5`3=$~q4Qhp;fE=`{DRp3Ltb~p(Z9<G<o1(6Cv@x0 zvNN>ZJXfAvT8eTZ;JtqXGSuoLEc3wKI4`Vz!~SIVU~!Q-Bwea`Px(N=K$K74j#7~s zV56m|Gd?3g9pKW?)p!$1hwrrSCeyPre1~0ofCzbbjeU0v0ejn4O4paz+sHK<*xra| zgQDB)VY-DK81jzfi?ToiU@}>(<&<Z^D7SOWJc#zGghQ-l2h{Rmd)p{DBD|l|SmrBO z5J>9vzJVkY^q$u$$kpQ&!~)8EbbJUQk0<tSulGeN5$evx)OoZ&?St_PH#u5{?b^#o z@AVD<|EB&v{EUaj=$F8d+&cN5`m``r_30X95tl7zu<N?1*L$3rkIhl^uS+*6dYbfn znY~R%TEB<^>c?R}scq*~d%b6<sL_rJgVejg4Ik+5QHU0Lf$^b{>ju3SL}|MHIa8mG zF{<7(iDCBtJ7M#VH)!O@?SBN(Jx2%=-eF(=E;KINLg(+q7Qs6}U12jFmtO=sS1B;S z%7)eQeathWdY_>gPK-$N?gRUJ9HhYH5okoM?}SiS!gh7QBu`Ehif2880=3loC8X+& zB|pKFIa;rmGcl27?N3huQNVDG{(oR(sqG&DEQ)@Yy^WBp=qdKLhY$do+UO-!(gJL| zfI4MJ`z<en6-nRK>h-<?QE!SB=0*F4`=3CHG5dVX<->_-m&DL~lVpYAEic-?n^zlv zETr0#@EY`vgn)Z6Lz7e&@xIdIeJ@|AgdGOhGqrnTv9d%7sw25E1WRllpO?!qgUHLR zm2gF+{8T^{V<~v6Vq(_&XVH9stk8Tq@99EF!cqZKcpo{nu_CH1&BU*Vlaft8K<W19 zI)5CyT7QOz|Iiuxc&vb^lUG}9?4<rvdKVm}9O-iSw@hz_^=8wQq2tO?n0bd@Crq<* zF@X)RbD)=yY*pTcv2(!Gl9rf#7#8jr8Dc#dy)r^?gVg>2I$_>{c=-S<FR7G+57Bwg z{CJhG2Ii_xwR*qKurZ6v`yt4>^W$<Swg+iQQO+-*ezsYyb+5oK8807h&yM{&8q7n) zJB<D<pi;O`ln;j%<ja6m&O{*(;yvbkWGOAjVfr`&9I?8Q!ETRq&0w!tO2t%MA9D_N z8^OF-+F-Xu%0Ox^rUw%ViaePoznv$a8SJ*nmn4{wzcE*zj$9ZnDMj<XM>1E2u6L7> zI@pcnGuSPRtC6q&2bx0-rR5EiRHU?=F>Rx<v$|nzYdpZLOVG{%-xB@T*8uNWjN5L~ z%1>3IVV<rZH)^xql^ENRSXKfQn0Mpyu>Q1>i^&qC@lf8AsMTUKBp+m6cq)CC!g~sm z{$O``y~i}G&SSa-PXtdC&p|w+c)pK32vAmTOK#k~Vq)JO%OJq?zmo1u`a9OSoC5W& zt~+k3>*k*yad1et&7`fFpY#+wPW>_PR`4$6mbf&D7uf!H7zb!)XJg&V;Ro8e?HcS{ za!|`*e>SzI1hsN}x}2zXD^=@W4&r%>6ctjT6qCSAU@3`+2sOKCm{lg@$P7^K9uHJ1 ze<Lh@^>Dr+^F=Jx-P1CO^*lm3^cl^T51}(WLiQM7U!K{B%YWRiqOYHjAvRv7uYe|7 zTX1mSaj-s?MO9Q`iqe@22eL(Lu={O(4_^t@DYJ`xY#8(tYA6#1NN*(qwJK@YP~|Re zJzEBas`-`rZvB<_q1Y@6k`^VU^nY?S9Rg($d{F8O-iPI=)BS1<?p$BNtw!gW-Tji3 zHCSZB%^eRkWqiBxRP0tZSAp;6aAR)tU5kEiKOkk928i}Oyk6lX_XR1N4Y@yo?or{0 zt9J|P-8S`ZQN2OEJBRh~-6Uqd5@ugEZzrI^X^O4j1dc=0x{=7F!rP_G3Y#Q*A*BCR zAo!=uU{f)&{~R{Q#HZ3|4IH*Kn!g??HJ6f?#@|7O?qm4)C*JmFJC)(p+nc1@6g^M! zD*C0cUFwsioHBd(G2}0(8?lEUL7>-5Y#T?=xv@X+L=rD!iH_L+8jO167UiHP_9NKD z<W0((qsluY%0Wx(;Sfs3cI@MZ!UJ+`#)1AOA|U-65`_N^ik?9_SE}q8e7;k5hhFmZ z(*?T)b;I%vz20H!6nFTZ!{)j$kvu(_eAwiHT*V!-II2qc!czaG2!~z@@qKvkQPhpg z4!$-zV9bRXalga;LJR55mocx?(3jPXHg%1lW~*yNbxjVwsmE91p8J7kXzOI!5aLHj z8sorf4Rm1q-)N#Uf*=hD-xGweEPL34!jF*QU&_*PXn+{3B8iiLV&tM8RS$Xq(?yE{ z*~U;W2la52qg?Goz@%KAO|M4tBM!WKQ$+lduv*i-hce))wTCKbwsssdIdLQ|<oRr^ z=jd;>G)+=EoiW_~GtM2Htl9=6H^`>Q!9LEr$Hu-sqI8YaL_e^z!|XdFcO4WgCew15 z%(b27VnC+Wol&88+hEo-L#L3pN6!k4w=TsO!EElA@wu56IOk0j+$*Mvav2zrayEBU z&T{}QbnHV7f2L>X&oi4JFCI;k^U&+e1u>TrJ(<Wx=|qWV9^a1|D3nTt?#1U7r;4n3 zs-W_qfS_mvW#20T7<N7y7gj3qTQ^%9Z*9Qwm+~gyIt48kP2^RNAcaGyRu3=zI<&ZQ z+vXG%V?Jc98)4_s09ALN!$;E2xnGvP1@Xfw1$X5*=!sK@j=jfWJ34dqMd+t+=o8sV z=#S34e**NC0&h}eO9geA5f<1|QC%jo>S3kj6h2P6fc7;idclT9vz<+rq%ex9XknS4 zR*Lv_FB9c&MpjJ1hZ=L+%k87lc7!)w9cr;d?fN6Z$zDDd1Jcqi9gAtjj~Az9$L8=t z4sGR0o@11%6%bF(P8)|iZ9W51y#wlH>bj{TanT+I*_iea*^%wwZv<wh4KcQ81xPdc zrrla*`=coY+lR@6ZChph&qhA4l0Z(HPvp@=O^-u)w4J8dXqR~$qh(8s0%eZSy-R=- z<u+lIrzl$?r#Fy^ZKEyzXPy+_=(xB(=;(nHJ<H-GFNENR$qw*>c?Yx=Q%+TCWlnr~ zPnreDy&_~;Jd+lQJB7xy*{bMHmPu9BOj=Ah^YMz0P?kE6hRK&YSSvo$HLjZ~I7Ei9 zYu<svv^L77D{l^9U4Yb<g5+B!D~IF9K2XYs<Jh{!93XP+)C&gjB@gUmy~BH`Cw!al zZ)%;m=~8^8mAPk?56>FScv;R+x}EO25o9#Ii?@6)d)<AUie*hGmV#ojcihM2S`^we zMft9XBWt9gWbA#acTKWhCeP#LKS24(`g|;Cb{scG>O{#|rN547Ek28@n&~U6^YINu z7-Q{7RIlJrE^#miKCOs7vE*bsJ80Tib4PI!-mftuX=CxM>fu@P88XIcWyKk<G5L%< zoqfLz<>THFWJ1)k(OC;J{w(z~tjj|Maf7)e8B6&YwgT-QmNOIGH0Gj{27GNYrSHws z*bqa3)n^5ko(KN(5qM8@RH#r!Z{3E4U+*5Ww`GDoB^Jr;SRgHVV`~6RKx>{a3>{PJ zPR&}^UaaC7waXxN7!gj*%!u7MeqHdg+D=ZPL&s)bI%-EXd|22hyj%c@AczJ09YJXs zHW63C%KnZBhLrfIDj;qCNYHE_so%k>|I8A`XZcbEWfV&|qh-!$G}Mw|YDbEk!IvUC zeC)$C_gE0Hr!}`1$G$qQV5U})T()W71ydQ(p5f3U`B~sQbnJt)uYv8*fvlRYu9z}H zCz-?8F2m`!!c0jwjbMJ*<nTf5UbA|Oe3|<SB6;}|wB_c@Tb`7VHAqoKZ81J14eird z0+}Rl$fY0Gi1W2#)kmJs@p-g}YLXI-EaC26>2}2sPF#Q`YE!x3ev)4zR*_Lbo7-xf zhr4^#5{GncqYyOZ5>J81g7wbFTce{dI=>q0gcd&}^>n2|jKdhUO^Bz^(q<(NsJ5gQ z@uP4q-)ivjTvh}R6C8Y`^qpJ+dg^Yx^{!45Z(rBi^0{pDj;Q#&fk(jpcNx%gzEOz2 zYq#EO<8nMmOfCTnWVcA}BL50(Yd<t?gtl~UOQBZkP|AkmN;`ccC9buP;MMCH8NdrD zY#)JEs+I}8A^Pk(C8m(j*2)Ilhc@@(<XT&4OCe<jZWAb`7Kz$28+~rONKn>4RBTe8 zd59KYq-06tz-Y9s6RfAbVu@@`+bVE2i_e+AH*|C+9R2C=g?j<Ou?B;Ou5Vb=*q^nH z)AK5Ako9mxh`wiMhd#3eSB@-oV{tjyx&>GV3&4m*?7JEO6}DXXsx|`Fzqn7^cY6^6 zX&4OeR;<R&sg1YR;>{WacLT&HN&XpQvSyfz&to&!b&LuBOS$;`Oo<0MKS>JzT7jH< z;1NUtfo-Qn#>yRehs}`m@YAvH`Xz9JV|U13lH}To8%M^Jfx0tV4n(|zt>yLW9BQqo zg4xyz>T(gk?pje^HzrP}CdBE?5bhOxTAXUd9mNKgUyecEqQGZGX&Z+eoFpmr99+2? z(TZ=v5>i)~X&F}Av=XzrctkC}X}G@>NCdZCf|p%eNEofN%|XjpqsvFMbp=?Y4z<ok zj1CFlb)@9fW6y}G2-CRbkpvUu8NiTxr6`wzwQRc5V19>>#WX1uoR4FEvOJqKs!L-t z!6_1$*T8v@{TZ~^*$DGn1oa+{`7NS)4-9S&t30C0jtRY9<aXaB#L`qP2f{`Cx|eed zC%7F~SW<;ez%VH+<5--Sw%{U$4-<w_0C-4pIZ|ov6|@9~E5>2i>rky~arOuqpc7ON zWmdM4Pe8q6?+$z0X&`E^#~vo@B2LAp(J?<<-TB@I*HK)f>SQn$l&1{k4x7pKq0JKb zg^i!IUu785@j-0Eh@MfU{}^Z3wBN*OST)WCYss1}nrkF{7LWTJ;4X_gnN?&jg{Mh{ zu+359t4jP02%Ik2Vg<1GOVe04d*Rck9kG;s2e1Pj^a#09Ci#w4>FT?D_l=e#<zl-S zbHY2+D>hJ*u(23MMH}?T1}T;N7-DuXg~W$*Z202?Ht?u=oXT;lx>KMPD^|HP>72)3 zV^{7aii@(3KI_01!GXhGxV_a7fyNiKIAEJoTL!ppKxun(C0nDVrc&4O?G&g~%xdic z+#%dU2UyGtm>h7|Q(Hv)eeWVg3!ft2-13n;Y!k{Io8}-0tss&XI-4#}ihBooOqrf` z(ZddCKcJF%^!-Y}+x#MqnR(s3Va<C6pS(6=H9lsI&&`i#t%d}^9&8EhGG_0vyBD8# z@s8wq;cMq;ir_;rlxAE(UC<&*4UH*l;7%v6xOjr{2%V_(hXA8-1OqRrSg%%orUrXL zSU_#@i=Ck9GZ+!{x7g1w7JiWIDr@1aP#arBE_wNaN5ZF<ZK3&>+1p-%V}{We`HrcJ zsI%C#Jnz64p5+`gPK6WB4R~ShYB)iIC%1^0u0Cszdvvqt9=7k;im6EWBsk&BpuA<p z?X#vir+*fA{XpE}F|ppKvC%gv{X&yXIcc>Xz=22ZW)IFiv}|N|;Qb(?9r^fKhbM$* zR$nBweNv>v++J#qlvvPgdnxW(Se0Jh_={tWYfCSd<)zFxeO7uc1j7FwE7f7NSAr6y zl(Taz2leCV?-ZW5@w|cO6+AEE*^lQLJgj)v+iLOdxAE5T*6}`t_bI&bO`zQac%Q-h z4Bo?d591BSx_d+uGz{Bh9k323F%hQ$=i<2zj|UG{N`1q@?hYF5_^>hZL<(S>fDND` zSyq#7<N`8*f7eC)XI?n{vk~<B@K*E^ANmWh>_ZT3CFkR;F&}v}AA11{N>JgBeFz`N zV?rcSVx863UTUpC!z&4MPmXJr;7a6QoTCpc_*@Xj@wk#5<H`Ygj4m-(A6S(SX-4fk zz7C7XxEg4CHTqwNXFZ+`cqBZ{c-rv%5D)O213cryP`k46&c@q`w-av%-VVHNc-!z6 z@x}+%b_sY36X(Ui&*NxsAD#nv-k`RV^HO5P=*P_ik7Kms<^W?u86$1Nym7Y}?nh;B zBc+M>|1<QqNa>t0_Wv3&n>oqm)8Mq8O-nchtX55pZ_bWy7U@8BCyLS04R?gZ$Nb~c zoy>0=?AjsEWfhJZ<!l_gqO;LBKesOY(`~T)X@xJxQl2AD9$6_ggx=f{I=cgB&4+XG z$6Z>taYropLsoEqUK{**4fiZ)f^0IrJu4W#7WLiyAp4|4>2#zeL=$+qVYGp_G?T>| zH$S7cE6;-qupYP|gOB43I^l?%Fkf1GB0gcT3%vXx6jSaPhO%T+S{x?!vUKNQmqq@@ zU{{%RMZ}W=Z;om4atBs}Ra<FJ7|?o(^Hb6d&I^u9mNMeHCeC%`g$5UFOsU02AnPJe zRWmtLy@fg){ueGZ<{|9U=Vk)O{nrq@(1gyItDzR=3tZShbPNO6xD1*Wx;0%EY(mW9 zI^S*vC&ktUr%~iG4fWElyntd*X(OgWFj$(#!b~Xx-Y9XeqyPJeE?octlZ_G{@~=)+ zybepOzGqTqDH@4wGRA_k_#{`OIVnaG14=gr1ns_*%>8f!;tah^ni}!OfuHGUhGmqt z7vGo?o8xY=$r+)Rc)Fa@Gbufm-Dqx%lPq}kZ(Jl&jwDdOfFB^)ca&nC#T>w{gfXY? z^<a>e_SC!<8-yza)jtpk<RJnhyVJdhM7LeJk5JIdhCVB}N&c9nyK3|&fohOztyDPX zKR6AJU_V7N?pNsg12h%x=WC^$8a+Z`*eKT-)0)5n({XbCevSUIji#%X91(DllWr^i zO9m~KEbP3#z#{>^O&3?7bOrnnFU5M&AA2<(53~ksL+1-{_?=2l1tkJ^0}u?iicO2) zRB?oyD&CsGY}~10u(%Hcy4t7z2f!d8Z!>_L=rM5#7vmQx5PDBij>7s$_l4oQFO}kh zMX<`&u(QfJq3Qaezrbfy67%}V!B0Mid!i>rYm{CNybeK{f>lbXr+<a25E7-!P=<T@ z(J4l<dGbFLhN2{9aX-;q1ivef5tTnmL86J7xkF&W9S}wk!x>O#MI$JC6a2PZzku># zlBVJXPa;d~C9Nn<t>#6$wW86n(1o$kNFv0Q1bp>sZMXKQi~7>myRe_2F;=nT7!AfQ z4s~(Zrbf~i&;N_m*LF~<G?L`^Gmh7=?&#kg{*2=+{W<Qoh?`{vFF<adRX&Q7|KiI9 zJ@{T_>zm}jDCb<w{TPqY3l}h2-$9olc|RP#U`}R>N9G@wZpN5Cod1UO6^!d$IBg+` zoY&q!QYw;Oi9Jx?U_iWh6!p5b#TSg%2)&@|RM8S5ZUGhB-j++OVh#TUdlrJq`4riv z+$MsA*YuOQ2j8u<w+#XemiZ&7R&eXaK2YUh9E_863m-6Y;qu6`9>lM;&+k6elBLaE zn%Aez{rA~OB9D|F+cJ3w=Th??MZzMSTy&D-4n-6+5Zkz@V_Z@zCDkngw;3zdMoG&S z!5}b}L_4(D*A{8xl6Fv%Ytim;Nwk(@Qx@SyNhkhd8t*ZJq&NozKC;K)0!Coe*2hE| zdL>dI6(6DTg3M!Sq@-r8$Etv$Po{pB`7nwv$jZg9e;@ryG+K<6!b+#j-Lpwp;E?er zOqSMbHjPqoOn@W_o-*CI@wMQJ4Sa_nr|3=Ouse_Z=nCSI)P>#BC54M5bE#iX!Qp!? zwwC6Yt_gpFst)%4>|yS{=02^?BQHBRv8Cz9j?;10B5Gm&3~51ijs60C#X_(3hHhOX zT~)2CsO0VjJK)71rQ$WXWZ<2G<qp@`TI+@RGvtGHaSnuj7w)Rms#j2R>Xi-ky(vLJ z3PLb(;=%dX1n8g0!UrWDL|J}O&R-SJ3Ib1i$UzW(bx3EU^RwZ6jlIP%4sAz#Rd5+C zM{8im*r8}byHD?bi3WvxV(!y`P}D61VX{0~ZG`)L{u+LwgBYA4%2e)G*iionITjj* z7*-B}<gD^5GqGpK#|T<%y&P&xB)m;U^=mi_#L-D;{#9}@E;)Nb=dP0Gz!~&v`;$ip zcbK;onFPreH^b34HR5QWR^s8|S9v&gm`8-rHKr130DpjE2~SDk*%61w{^aX}%J@c7 z@P&mdOVCTMl!ji?Lg&)t7u$}?*0LCGs!2i!pORPZ$Tq=A!rpcg_=q^DYzmblrwN`; z3u`>^tlAm3^m^&$2tKld>!z~cftig!x(>!8`D)roW=ol&t>&vVpIH`IR}AMxBAryi zhbtR@(nGDz?u)Tw%fWCbFCjpBQrDHl&G5;NkZbHRr6n8RQY27r1t`)&x*j3jfP$Bf z8)B+~9|Je`aR{^mYjLxue+}d?A0-eLH}_AcXdHjY4Nk0HeB*U3orqUf?s*trL%`RL zu5Sj(&>edm=7Lb=g7~X!z<pW*cc2n9+Su%P)>f2a!|wC;w)c=?<XI5v$6ALVhQWrI z2587;)VH^FAs$$8CF_wUdpv;!+45QA^>JPg)(e{J8?LJIR8{%>RaLkqIu{2kx;rM_ zRIU48FqRD5Jf&GxRn_E#?Lw*epP{)-M#P~PVO7=ACjf9z@4)@ojRanItcv^|SGdm; z%Sb{j70#c*dT|~-KU+ReKZAL_9;R38A0A39XSfj##xknm+41d<xNZY0=mu)AhkWbk z@EOjo#Jl}9)pRW^7;3|w27KHDoti!=#r^}ViR5Gv`L~(&5z-|3TOA~!9IA!?Q9Zh9 zfh32oaWvSD2G+;tp_nP*GK`#DNCLLe2A41C2Hf6qNwc-No0;wRxIc?ObY@eU;S?ob z5;UWAR{VSPj@t3nzZYZO>vwZe3`HKm;B<C9uE647>%9VXBs&;vqN{8RaO#)BVe77{ z{NrA*#aMbG0J{lUww4I$w`{d*y9CpVFZ!3<l)q+4em=&H&tuWhM_|3ff*$hlLE6JR z&;@s&AyWuAhPq^gZL+cN;;(+jrQ0>zW~F(zV3NH4YVBK&`0Cw4T|HXJ=#&b!7NS&@ z{tH+S6nt&`TMmDf{#PCmQ4RVV_Eh@qpj#&FR+rdNS40J5vAMfrd-l=TVmW*yu`Fu5 zF<zxVWYn+Y$;nBn#;k~J4lBy>v7&6Bes7`>M!1I@oI$u!CWz`<Wzl|YXw34=;0PMm zF|VdQkAnQ+_rk9W#wpc;A5I9Zr|4jvRpYB+`}UD|aYz}ksTVCO`xp34eB_78=^d;4 z0m`z6b5Jzd8T{bT20F}4bZBq;GZI?QQLpy4kMOI7*8xb*&~fd};OM9@HIe@CJ`W_( zB+^i8jief%_9v>MuY!xI2hJ~ro97rgKK)iCk%fu!72VxvwGIa#L<=?g&%pNK3!sH> z1Db;&-s*4Dse4MmwPyN!U?R7f=RSgj_><3IOh&R#|2|TJ4(Kq6a;tecH!T0k{_7fI z*T9sg@d~hOLFD}o-rvx0Z*DweI4?ulCG!?8^wHYEWe~ot+DABai&8ESx_A-!;5C1w zoSoWqg>u%lCEHMeiMqR)@ahT_eT004yIarF_P6Ph*0YE3HcE*IZHCH01t8{4v;c7v z3SVj(e2O-*%#6wXn$|%)&fT>s2L?X6iPR~^KEm-zo;f-UtDoV&yc&9KsnV0%dX_dQ z&Ckb{JWI9w`mcHn5AuS92f1c5_Q<?Z)r@AH;~mN2k|SDQi|NsKQ`p~(n^>f5`;F~E z&8AhK?{uvc-WZo}PLK@0R4QMo=qAZgCW&S8)T+iaF|n%glbE%taWJ0MMyzX+nuAYC zul=GO3`e=&FqPJ9svc)0EgZY%JBiyo&C=I!Y6?fr#0r^F(3y8Yax9g^rSeoC_3Wdb zeHVLHZ29=I$`|*H0VlRYIq*k0IRpElvCU9aFl#~-SAcPI;B%b8xlff*xyedO`NaB> z;;5jU^boHm&7)Jc)ZvmsC)P0-C;Sy{f!4Ee)0PE|=5}#SUAI;)DtAERq|^4}xLXbt z$%Z|1Fc%9wKJN&s#j{9IflN}lC{A1=yB5R*)wGW9kzlL9J)w+FIU7_A3z5r#E0G`J z?;{qwY<M4w6=6<s4VWYWrQz#bC;Hy&JDzb+J~MP0ev9kzXQ~b$$2s(lwXbQi8|Ai$ zO_T5uWZPzQMZr<}L&;qZaAf0O6%|c%#~b9`LDZnLF1U^Rcz5(!e3++P;-|VhfbN{% z$B!e?mkoVQMqlD)F%Pg`zS`x)Tg2No^g3KCUpG<b{+dQ>LA*Y3N3eJg_uArj1iw1y zfwNbpPp`#F;2Ux?&S#v>(|MWr+{g6?kijFhitBMx@@n8SbVtZA_vBz=px62bqoEo& zIbt6SFC1M;!>M$SH|~gKgzkvL&*~Hw94?KAz&{VjQwE>+$l`*O<CrAqbLH_+qm@PL zXZ7TDOV^i4Gs~oey@nRPdIh)FT#adkTPhMdW4MA$0T0~@ra%bx6#OM{=^AA?SISm~ z^Kmb6*dzZ@l?P&3@E%1~IFu#bNO2E;;A#5f8v9Jx8O%EL9A_a1w$Fp$enGkxjy6}o zzK=RmA>P=Z+QWB)tHS2Q+xZ#-w4;dKpvuFsIVb}0EnS8;v<E58eMp+ze~VF`<T}AP zOoNB5=-Ck7;a>WCxcOjfLw&Q#oxmHve~pW=>8*#64}1)o2lr#YlQD#o43Q^_vGlzT zDV2vE`bYQ}CRp3carfWksS{QjiN4q^_-nTC;?!_k2wu|Mr4t5;_J_e(2HZo^CD6F$ zB7zlmIf7(YF)T|y{YEs58@Bzgp&8>6N_pH9OQTCDG)*ETeLCHUgTbkmon|lC%*Gv) zc5j9@?wU#Hj*K#xp#*s=?tDsvUYkX_8%IWv^L{S4=w>zU0LYVD`I!UlVWslet)V-n z!l`#E7IBsS+ZahWTm+V<;Xv~;I_(&!(!YvpCC07mON_5|rH-{H+p6@Y_W>JiJ1-@# z1(2E7CQ2E&rUE-&t_I^%;_x}S8vpOlFAnSmGC$}1;^ZzM)1@6pHl1IrqxS&PauD#~ z`A?l+P~)(3kCjc>#6NX@L8U(b{322RITUyd&!c!A#B)EMop{>tG~<EY`)%00|BL4r z920RG@JT$U@R&N#cG6D%PdmT3?fdA(IKOZp2z({yWBmC=5U^k#sBp(tgnxvm6HoHo z;WOtKR1$3^^Z&v51#fd)x&Qa`i$vQ_bdiI{h37gvbMX}7DaKQS2lMjZaDG9ZvG_*( zZpG7%=RrzI&dY!0{KD`%<!&c>@K3}spaJ4fJrs%f`^-yiVsBA4`HsY<AR=f*PGlg7 zm?wN(l-qHS-JCQ~lHpj4H6|>Cj9V6K5(Z1VVX$;34VM4dRyhj>yvqz*<>ZUD%6sGZ z1jW6hF;Tns0{*bky=0uUCEC9<GNlOn_Vw-4{~z|=1wN|k>ia*F8$(E#AVGtIjsgk| zAPOoFuoEF6APEB@3CJ}h14+ou%nTO`8XTewW0ZR7)mp9ETD4ZIBGy|1JOtEM1XNU1 zL~17u)l?{=qVs;&KKmpCV)gm=eLnp^pEn0qerNBs_HFIU*=O%Fdri_weAE`Ne$#CJ zNZMxoNV-?Yy6F4JkK*^Q7ks+ekX6ys1l6)=OYjVNU@zFR*u2>`DTcE=v}3`Rb(*W* z$I_U}$_wZ^9t-@SGUJj%JO_jPN@;BcJ{S``>{weUce^%)YgsHC;j0TYjksdG%yL%! zqcJP&X4t-oVOzbq4@9!U#hUdC1}iav)nQvuMR@q32ZR0N_~6KK!^dQ@e)UJZqsV6! zjkzDM@3od67s>X7V`FB7RfvqujvH?isdZ{4#?|&wXOxE@Y8*9#FKwDXjC-*0u4Ck= zKEnvT<Quwvx($7>3dC>kKhJ1c&gZ(v*WbDy0s97t#+A{s?4OyL^<xbG9`@4%TkL!k z6Ia(vBW#I3PMOKM;l5W&AKoSz+jxkuFSO&n|NhzcO5X2pD<FcE5uU+0JX2X&HFIcp zjhC0Yx_=a^O)yiqGt#z%V1G$qWRr^Rp@$x7OCHnz0epNt!z`Z~;Xm+)X>Ke}3*NeU ziD6zF7$g#C^(%i$OT64m1|x%RSE~N<M9&S%^SIw}k4!Z?#Z^qh?qk~EI}f|6zB2;h zWR5oT$%J>4oT{{C(`o8&9B(*VHuaMGq6!y3GFSCSt?5iFz1%CMP@13&>gUjF4y7`! z;O82JeAFhYi)spTIQz&Z^>VXrZTul#8(sX^{K)#OPqsCP%gJK*W&ED9;ILz3BIhM! zG%xSZXQ<CA(acRwE_HYS260S7<yTy>{)z~{>E5|uPKCk84NMOrmq@*sNz3;RL|f?Q zK#C#cO3ASFYH|xZ*o9`G@WvP|!y@a+GG#L3(sDO*8`wIR<02a+$;F{w>=F7-H>*Bn z{q6CGNMzjxV>OE){n#e-rI;+Iu!y_ugZjILiSeyW6!1dZWUZCJvCO)@fn!%KPqpIO zUf=9ow@$@$PT*K^UGKoLYnJ!4qT62I>TKI@MMhN5^S&DxFALDTlT>^e9!hGnTjIq- z+KRb8{V=ssSmeK=EX*r)q|cqS6j^*@bM}&-a9_3$@1n@-d^j(XK6ly6rbpQ(!FwN- zN`3v_CxCn8o)?(YBRl1zSYOY3#21hFeDPs1EzKg9k0my9390QEyJ<(8$(u~l)h`#q zwr3&{`5ish>NEPAJ9V;a@wIP#j!xVj$G*j96sN+*gzw%hY9^+pYz$HIp;AQ*{-F+k z$6A>$%DS;S)1*c{85$dmc4->nzJFnf!l>u#>u?^8oi%7aG*Vg0IJTOjMQ9}=$(--- z+g3{Kd&%i2X>D%=)C@6RHXmdqAen^tdYN5?{IJa4XU}ePt!BQfJU-h@3By;ZRY3WP z`Q4)U_D|nE>*%NN@-1$}+69(K%o(rRn3K?~XFWq`W}JMOX&pDhWK-T0^@m#=7+^e2 z?VaktfPReVK~I=9<njBc1b=oB$4kx0FFQtsnrjU#N<K_>s5*PFzsR(mS5%Z=b_4+) z27Mk-JjYu3{Yy){@MB1P%<9x@nfRu%wH>|-&TM{^n|hCMWpds>;_nynr<r`&XOSOj zOGK^jO2%bXcejef>9?yvDwyRg;=v=)g|Y^kTljVt?+DIFpZf?G;#2N}8SgpP-bpa| za6IlTOpXpb9^STzZ$mxd(AHqqK7Jk;X=9E)OAZ{se$Q&<6PkB$%<6r<#cYu6GgIKW zEh}CMol9XA%gm*yBGexA@8xym;-gu~aX#0W)%{GPvl;$=*PU$^?c^YGq@t`?Gcb6z z^LvESpj4&#6}<i_Ph;GrW}Z*edEOVCw_oM?w2nNFd|Nz1r2d}o3HDw52T#fx8NQSJ z6czd7ii+A2%*+(#n@bB)Dxb=~eAaz6BUxx$Yo!4DnerHE*j3m#CBjw$KjP%0v42eF z_oat%%=gFhavrxOv{^bO%_;4hnv+Zr(Dyz2scEJITl|;HyBvpf6{;4+)Bg!FKrZ80 z<nAxLLbD|?2t2Adj<xbCSrIeqUWr3m%fL`pKVpi%M;26~+YB8=!nFR90IJd4&dr#4 zX&sFwjkSCAwOJ_38P#ag%tpiS!ZWt`N|+xsj$;aLD*uj+W`p5}@%uPFB;4nH)wkMu zSaraDh13B%6+<|*g11$gIjc9)oK;gKN@@5^bfi&BX=O3L(ev_2wJ!SB>u=txPFhcD zoY@?=erj`^9O!WQ`sU|l3>pL(V|)XX{PFegU)PqrMh<#&F_`zN-%&4xTbH<akkJ&o zZT^<drN=fs_*mnCHF@PVGBT*1yq)wunJ-^>uC_PEZxY?F;KvUck48d~#3tWxPDNRN z!KBe!eV+`?9CzlKJL=ze#x%!e-mw1!Cx@c!I<u)?gdexHjoKs=9nKz<@E1t<b0)EG z{R!jcSuj`z*cumRJCcDlZuA!4Tk5o74hS+2TGQ)iv?mVt<M$=UG95QPD8k3Ca@=x{ z+%!2`e=70Jv#WKG3R}i|^H&cVqn6aJ?ZG%-50_y!@gDhc{rb3B1Ge!}E(bn%LVd)G zP5NVY$HwhPCr+`|`yBP2MB3dtKL4KAeO6oddQW%GJmwri4zg*?Jzfzzopn09n~&tB z9ft4Y@gCUfq$xj=vCW_0*vJuS$^8A&v60WW_uG4z#|6?~rjva>US*kufpB?}`CEU- zQ*oJXEW7f%Ldi-qTk0EMJvy<_RzKg@v)=QSu`c)cx~wlNVk9G9^5bav61Oook*{Hx ztVmXl%iN`kr?`3eYs`)<j;FE`2V^Df*h0CxuK!^TRPaKQ`bWbU2+1exGoZ!LHP8*v zt<c@jAD|{^7jyt(0ndmb>}k+I=wiqP<w5fyJN#v!yzu-4dIEY8ItYCQrLy5L6v~EX zK#QPSXccq=bSrcp^aQjOdJFm+^f{FD+=)v0(THx#hZgtz=#SI8|FrMcs&2O&si?i= z{*u;v?<l?N;&pHLyl>OKm1noUwtwB5yMCNLbz}GERy}rYw_%(9`osP&Y$#26s{bd> zM=Nr!e){mcna{6Xz2~hn+YY`{HT}swM_L+o2MT{u*}Lh1rKQ(=w&=@4J3Q;B&9$Yz zS(#8$GT!m|Ka=f^+nv=J^Ha*F9?V?$THV!4e)a0X*m0Bg#9jGiL-MYrPbS{~`2$a0 zQu&iVT=DvjXWn*w_UywSRPMdlKli<?SCU`fH+%f64?R5M&GW|^?@q6u{>Jvxi+8^8 z<dG-N9kBKB!k^yp$5$NpKey?wO)-P*>*5#u;mxFN16zAMcH^p=3wup1oAprt;^y(g z7H`~;xo=s*)o<ILb?*Af_flT_IN0#m)#p69G2#A$FZ^=ko=xFj?dY~*)Mxw<;(_iz zO8ZIA_n%3wxNg|^D*KNsOMhsaTk_$N=}VU`Dz5CecZ8=Q&sg-y-|tAM{K5UUvzm|C zuP@r__~*7aAN9CfpE~Vto1PD?TKDwv_xiuHX!5YP`W#-h`zFuSJzvZ!{zLAcr$0H? zXFPlFff3K_$-Mu)DR11dcYM{>SMU4c$m_c+TFWOKf3td2_PQm%+qr4sTi#)D6aUgb zcI1Moi4X2rmHf`QtK;1dX2x8QlG5Y(8=Ofy20d9;^ms#!v-_UKPyg~@@t=Es_U`<j z?09p?c|Y0t=o1gT(Q?N4$7ioeeqwmW+~=P9UF9E}oPkY$-}v|oKTA5WG4^M>9`lWv z^xEHkzkJs(`keoET;TM5-qU)Ne6Tj7^!Cdus*)eLs^Xd+uk<|li%9p|E_lR9eC)1n zt0&&(Xy0|O{l>CSY-fM9IiY-B(V|aZTH>j{`qIk2e@$3gz3i+#U+qud9lYwAw^Cl7 z^3IZ)_n!XjvyY#@dBXEgo$=buk1h<~`}*tG-uCJ}TQ~0=J>!%2ru}2dGp{ZwdiK}v zBs}^3D=+;+&Rglpd#9e2`1_+%VlQ2IO<d-dj~BjI@ZORKKEAp7qLt5=XW#UA@k?h0 z7C(FUu9`uY9w?h}$MU3?V<+`^=IPU8&b#pZ_=4v%{`g;mdp!4tTd#T|J+9*Mxxb0L zvH7A`c0L)p>&>D4A9;7qqnk^Ae*PyVhwi+$!k>6sRm^V_y5ITzOMA98Ea_I)yU2*Y ze##4Xq+YY>z$598{b2N28<T#1^R8QypMUKyPkp>^)w%Dz-DA(L-8WouV9!5}J^oHv zb>OXY{&f2DYv!E)^wIa1KU%YV(o<<4US(fbTj7Yjn31q}ZVy|p$X%XW${$&DY<Fa7 zan>u9r>{7Wc=t!UlHZsah|Amjc<h+s^OyYQ)6*C3%$-y|`R(P^mrtp9^^tv7z5eFn z9`Cu@GxlDV|H!ky{ja;8dH1?k{xGRE^5lqqpFH>6`ptiQal~zp=l}ZNCkDn}y7P~> zCA{&cAw}=bd|}C(1BPF-`0-6sinqp`RW|ST^qTKo_I!^g?zuT>%USQmU)A_=%rIxE zXK`h*&*Qvk_(j7<Iw#cBuB<CxQs#4BG-k{t!}v4WImJ_4J*=|EU+bJyTwYnZ(iuH^ zEbQyzH71UuuHuZ^esV8AyRz&11jETc(?1S>{+;WBo1*-!`+6oe=Dky<I5xSLyBM1h zXWqxyxKELLmgNkYES#n@A-k;Xgs9`1*uF5>6PE1^gB@z}!dM5zLNd>efqFtVh+SeX zRusyszpeba#dS-anWdGUI;R<z#4Bk?dXl!}L8excwxla*N&J$}-jMtp{VeDlXaJNB zjf66w2~a*%0(qeTbT708`T(Nb-}w^JXp-_qQ!MUil5#|olqs5U%5U!!NxTx5gty9X z>0QbzW#!mF<6P(>C=)7%)<DgW&Bi@sBN90t!A2xD6lg<vHY&+R#oE~Xu{og;kPBL9 zeC;9%RYt2^R(Y&)SoxQ_vFgXFBdeaQy0Yp^>P*^+kd#H}+b$~~7FzkS(8`yER{kus z@@e6z(mOfsljE|&{!f?nRC$Z`lQK)*M9(R`PBZM?x+f&Y_lQf1O^)elbD&qdaT7EZ zdKnrDJq%SshoFAYozPrpA2ben7Fq=zhhm`Xp(~)x(0S0WpheIDh!l-mp&8IF=wj#( zP#yFMlnAYdra&)3--8~6DxkkXXF@-Nu7ciz#zKFDu7N&>5}+HPY-k&FKJ;s7G4vsH zI`ku`5PBWD6xs+agN{Nyp_`#R=+Dq_=n<$I`UpB3x(k{Qy$f9qJr7+AeFfQ|H4w|v z^d&oe%x>HR6+`bsy`UdL)1g<Pi=fA#tD%2D-Ju{f8QK92fqn~>L#<F>=%>(Z=uK!0 z^fa^*`V5MP8lWubzo0?T{g4Ox3)Ba?11f-CgD!!dg#6Gyp=78L%7y*}4TF9MRY8A; z`a{2f=0Wd3<DuuE)zFtvZ%WYH*4?-byba6;^TFNVZg3<x5_}wd9Q1--@Gy87>;d)w zLtqHJ61)<83494m2h+iaz=y!4;8L&+Yy-~%&jNoA{v4bG&H>*B-v%?l4DcE78Sn?- z55O<LFTieKH}FRAMsN~132Xsdzze_&z~6ws0hfSFz`ufj1<wG_0Dlbr7%T#dz&F4* zz{|kPz^A~cz~$g_@Kf+p&;dHYTfkeuY2Y;Q74Q}CLhwTH_u%ir8n6cZ82lJK2RsM- zCHPBl0k{Bs4}1^&KKOm`1@Hy%I`BF$0!Ba?8C;MPS_q{;ZfFEl3)!I@XfRX;r9rcx z(a;Jg4w?uJgi4`QXeKlY@<Fl05P&8?Tc82Zy-*4C0c8FZJf6FF;*KZ2c;bj>T#9Gx ziD!I?XAFsFoQP*Eh^N2D)2HL<xAF8%IrTH1J{C`D;^`~#>R%uJCPV$9Sg1GD13C-p z2Au)%u#1h0i;qv>>c(Z)S9g6So^<s%=}P*REBRZlp8w|M_%|>0G&rqy?^LcnT&L^n z41J}YboD*yI`dnuv%cl(_itYP|IJI)e|!S<-o1NbVvinDol<2|Euz{Kef84UY5MA| zFVS1{B|410EPYyN>D9uM)cZB(N$UQZ^IOz^=C`Szj@L0)llg(nePqsJ&C8@`${bAQ zT{171xqT`m-vIT4oX}v1=^$f)!5G4BE3^=*h3cWZp(bcQWL+|EvgRa`rlconNjj2- z#P5V8UKg|ws)w2&$#DJuhX|w`a<Pmaxooz}xDq1W1c@)jh)pmOVp8I=va;gkx@3eZ zhv6JN+C8hA-MDPTh$1($C#O@gY1kK*E##t*wJW&nNHC@_ct|lAEJbKAvj;yjs7hmq z1Th9z`ztHCom^SzSyEi-T(pvRI<Mzyzo)vy1Ak(9ou|ZCQ@7GtUE_0ls%m{Jjck8) ziLbn-T6vXM)mD0{Jk>r=sl=C8<E*SHS?YBbFXN@Jcu^&hWS3WZs*9^UPG601tCt`* z!{e>-*Ohp9k1Q^g5Co_xFIADi^H=&z>EgO2k_}^GO;vGuwbN5qS5qhME9z>Nda9kZ z<+UDTCec<ESFdzdmRB$3WoQOb4y&o=jdL+6JH0EtK2H^4CRZ;jt}HL5c%G#a2YL0@ z7L$ic&tjjG@|1d(l~ZcTZ*=ODtBY%E>uPH2%H@T3@`cl!B{kK)x|&L7O|7S{SX9xO z2fV6Py53Xy@!I(H{7^=}Xi)Mr8O=FMEu~8yeJ6NGp8X|dR#uJ4RgyDaF{SK;S9$lW zDEIoj(K=S;DyUvsU9-GXiB}YtI*Ut7>pWhs;r7&3m3zHXtEHama#atKwx_zrzog96 zljN_X-cV_6O<i$aIcoM-N7c5{Ye`voWvP>_l@PgyI+3(gZIpVvC3WSsG$|u%g{Q>1 zxTdbEm~?c-X4WmCC|+IrW?MP2%+8v+j$BKf*7|)H*7$vZ70F~8V_luUmL}<3Y_-*r z;>t?$Z^fmv*5OupBjza88`G@XRSg|SRk=@^IdNFoHR}A;zH*wj@^JDFNQa&|by|MD z=_5`fe{$ZWD5o)TT5jg#yiT7PmyWo2baLV_(IXv(rbja=_m$IFukkp`JjJyt8bjnR z6FJotqbf#}NXJ@U9u-hE%g%6@eq%VVuk>GpyF|j(`s+N-W#x4~KO@8m8dV8MzD9jx z{0nNTX^*}O={tbaCq?YY*F|F_TxYpe@1b{jYtVz)9Xn;Ujyx-B8Iq`5(M+cnX`7dh zxJc>8Pl{Tmijkz;S60W6pa!Os<-b`kI#6k`ub3<(Cl)WNmZn-Mt$Imaag~!sR#jeo zqMk>n@|?1MJk@Bhrdm2W@sZaNsywHZwMGQ5D!j;EEP7g8SwnKwOPsYe<<&mb4Deyl zG<B3)UQ$=%tzj%HEcZ%PO-N67&d?2XYWX61>q?rVkw~MoytAa=otv2GHVZYDCTt8J zKHL~*l~N7deskow+%P72d{c|PzDynf%RKIyT0aj|{7iRId39;cawC^MU%bR~Ma>Gn z2=IF9MqWI;RCPW{Twn6M+w@b;lYr#D@@Foi7Lxn+pSz4B(A1|bX~VdbeGT={?)2)o z``^5mvVjr1x^zNijn~7wtlZ~$R`_HT&opjV?(Fh9ul6vm%$kvxHPzDRYDUm<A2la~ ztZ`S&Ox++omKSew)XfBcT^)_i^8BeShklb;$wQa7GP%#L^YD!QmAaqdF*z@)kTq32 zS4*dsSCbolU+VD{dg|mEVHj00`5s>m%u3IM8k!g_O8EJ{Qq$8g`iNT!GIJ%*Xt&8N zW(=vFT)ns^(>POnq%El?D0}wADDrM;+#a6tzfd`v=<)KbUCA4?<aGi)*+*_)h$%G3 zBbE7QESH&i<Gq-ox^kaKVl&cWWImv7dCO9o)>(Ye$gcEz%Y=1>fAM09W*EPVDX1<} z#VXBOQR1nUhdTl)KLaJlxizK!N)>Y+Q<_Y6=nTn1R%h?d_tnuyy_u{loSIW)?20L3 zt}~&mxNc@mu8dGuFzqrDB>t~QWY|ybUt|~;#?0_l7E~{%*%+%te^L4$Wth5>;_-2z zs!zA5o;4cM$(-P3#Z_XSmX#~_m&?60l1x1%FgDw!GP>x2gOV0Y3R%^q(-xcBJZS64 z`^*}vK)lIMose5xYifZ|P0?=hoG<B^Txl6d6rSjVOxM+=f&X_ju&LB#Jn<t}M}g;g zI`1t{watcOM3YPH2Zgwohjq1wiBM^|dLNU=yR4eULkoE=ly^vZfu(aROaW%%mi?j` z@MT{~__Z2G2ogaPAg`6`-4y;p+#=@`gnzdnZgqk6as#>q;qM0|Jnyl}f0jmhe-{1* zARm5)_FtiKv>^PQz;yVsHze_vX&fvF|55FRrTFVK<_N-X2PA!YhnMg(HKu|ExIX|T z{dDcm!%NAH5+wX~K+;$HImoLQTX3M}KOl(Pihr$kPt^P{DCr}j{>;@VYZDUxPk@>5 z^R@pfjpGF2?**iOWdBbhk@ptCp@Q%?X}7FPi2qF*rwYP921xp`+JA;d+5438-wR6l z2WWrwLXH2$;wJo7K+4}k^A~A6PZ0in+8v|udW}~I!aoQ|`utb<yGrAkg79w#r2G@K z|1}!N3c}w5Ncnqf{|b%Y6NLYSc3bUpy>?I0{3D>GFa1FDQ>amXRM&)CE-C*=xxu|m z<E4Vc|1u!uS9`ti7i<3cn*XqNTkZP>?atQxL!hKjR4V@Y8qXHQ^G-m@U!wi5)yVW( z@%I5z{<E|{(=8Rxa6!U9tKG8pCHcQuW1b-V<3M!(pRW1RpQQc+V08b#TJtXwB>ZMT z@^9(4So6=-{9kFe3@?)Y8jYEPgg*dCcuPOCHNUUs-wH<e|CO3QM)P-p(fz+%^M`2u zAGDjKRQf@UlLhho1d#OOw10s{jvX=F<X85_qx-*K^Dhx3{EI+z|7W_X(itQO|3U4x z+E;^iXKDW5KuMpZ)Sr18vDl}={|t!k|Eo2Byym|JM)!YNyOPL;Y5pIz+Zvx5wL4ey zKL;iKSnY3(Gt!@={<nb9{okwQRDYm++i*wsf2*Ai5IOk2*78>T0qvfk`5%IkKL1s| z=V(;zneact9o_$bp!pes@Lva_`@gJfN%_@y4S%C{TjNtmyRQ_4e-x1Pt@=?DO2W%{ z+62lK-T#-12mY4{68_IXbpKx>{_rmlg#U<kTjje^yC-S>N1&vSs0z10qk7)rc^B^J z{(qh3e_s&(yFhgRuhIMqHUD|-w#KJhw0oN7e+5SOf4AnRfZyf$-;A8(-|GJhb$F*B z`MXEE1w=3P8eM|$-v=bT)&FOSKXPe;@P7zI_x}~*4}Y{E{8xeK{$D2k@COURe@wga zQvT~S<_N<72O#NN{ePzBr-I+*`M(3X=>A`-!w(cB{@-f175`f8o~Ze)prmi*Z?5L| z)BK-;(fxmw=8x0-H^J!sU#a;+HUDYtPSSXj#;KbB87S#n{d0!qp9X%H=l_2p7v29C z>G0<XQvUn3J4WO68m|z9{}({g=f6_IRT|F}gntJR-T$xA{IQz<8W`RGD>VOmn*XGB zTkUhbc2Cj#e}a;})&C1M|8%fPRmzF|f0^cADoFnR1Vs1$#hQP<=KoH+t@eF`c4uq; z-$6;As8spqYdl*J&tCx1{r_6czg+X*0i*kWwdN1k{O7d0r^cH#=4t+yV08bVuKB&d z@ACZLf}G^v(r>X2f36_;zgN3$8rNvd6omf)AmJ_j%+~zAntvM@-Tzl={us^Q4Mz9> za?Ky2`HyQiNh$pXHBJ`9^DrRkTm7>@^ZSTD_5W?p|Cf-9?*ASgevlyXKcwAO`)bhc zEX{8NC4H;^&(r+=n*Vb!y8o}%{PCLqHW=Oit2BR@=0Bs|$r>9q=4$>Iprmj0|9s8w z4StvBe+zQa{l7$qA0SBif1}-2`~mHrp!t6VC4K%YCCt%ymLTDO3`F<;A83At=Dz_( z_y47upRV~&X?G8eA&pmR{->a%Z`Dtc=AQwcs{b$7{L2K%-zz|L|6ii{7ij+Pwc9G+ zjoLj)^FIb9eWFt3Kl%CpOT44||H;q)_uxnO{~8_7g@Q!-f_6JJ-lB1uAp8j6rts1~ ziv+pJ2c`ed5jPWo=^+1&+2W?76oAry=ZV{8hL`%CC2j`#nc%s&=Zf1&{y-_;RpO?h z7lLbWH;H?p8J=J&{WUs$>HjKyCIXVa=uf53Kq2WD<5uY}G{Z~(Rq2xvN&h0;D*X{= z`qKVY`aB3F{bt-&`rNAWOBo~`(bYN7_o3?`(NTnaMG%M}5J4b<Km>sZ0%G=Cu7SVh z?C0OOln&2EUgDAKzTdGw@qkO+%eZd&i^o>&Fa1r@&S~N-f?Y17ou9E+f^#7^G!7aH zr9#3huP&*ns%3{qHUXDeEA9M7LoH65J695ad9@dx@{)2^^_^9oDt6}$*`~52STFam zKh?2ExtJAT%VqIcFg9|p+Mvb=(X*6ylSIztQh)#TpY5=Fp7Y0^#uMHDbnYhG)IXg& zv#i|Pu{TyyTrC@0i#$#?NM+M|;<S8cRZXd9cye;$KppjKkB<HE4_}?RwUY|AK8^eE zpC@ho8MyM#^SAy29P-ADtsB4@<t1ezdvea)S%!fTD`WDKIyHq9{(in(>meTsyKuP0 z2ffJyJ_S;4mwAs{$}g9N#@#qXj!W9Gaws={w7&+$?Z*JSLhd%OMi$)=6!+iw<JM~( z-w?%cc2s@vema6bk|CEyz`C4F1%}s2>tOvz8Y6Lb>cEmxL0!X5F{A7}{1-w_jevEz z=wid`ymcjbsIqS0M$)c_qAr)2n<$^I+b#`sX`o93T^i`pK$ix(G|;7iE)8^Ppi2W? z8u(9XfWt*NTSQqg+rEZ_YFI%Dr!*YJ)|x+_<3iegAO?w+Rpl4G@F+{C*pBnYhE}Hx zS)CGyq^uegdZYPo7z_9mizacg$3`|eHuf74`;sl!?&3sR4!_=(GR5D@3I0irjR~>a zvtdm0A9>*)q!Mc8c;Ht!_&3Xrz1dx#ek$n%3+&5(ykHJ~7<%c^JfEZKIZ9X#*u{o@ zQpT1dUwkNUT+kj$5R*HBV{x2$eJtMJBeE<hvV3r)XyEMGfy)#8J&GdB;=(T8!e`G8 zWe*OX9n2mT%pMWS9vz&|F+jojPG8S_&h^>JiC4kwaluI=<lrzg!AUV3T~p!W821H( zLzA3x&RDw~#Cp^>vFvVEmn!V}ks_xAlQWuw*#rIEIYLR&Z5zNbJ{2~LojsUyVmNEc z9=dKIhyNq=Mqq0SXYQSYiA;=|#5PwL!R(<Ni(6C}%pM(1<&#&U6~m~eQNX~VQKl&= z4i*dLjS5YQ3!Nh;)@M6OI+WdyW5hz)BQmxJbB}wwg?6UDIt2q+g+tR{4Hg^`Tb4&c z34vqX9XH-8>skXF9_Z`hbi|}s?*Orj%TZgbia0i6dNwKGNiib1$9C`Uo@Jj9;LO;z zH_(4zf49)~SHoEB=CJNyUYc)7j_<4-U-ulx+IsZRc29GaJ+>lt){v~E)|Y9!jamCS z%sp!#v=`dr4p*|$%XwS-)#*}uBmO<%7s*Os>tJQD%dxhU97rUAs-)PK1RO?dwkQFo zw29oLmIRjCjKKTdn!~ZX!$UA0lVxumAR?=ioK`tx>F=A%k&A&<`=_sBW1h5HQ$}ug zH0)=Aha8M-8j~G|4vEtj&q+~jiJ|N?^L(dn!GzWqIM~lr)Mv;y>~b{xh`fZdhmOfQ z?jH~;9309Uk@2dpFQ%8h_Ry;sGe`aDS;s>=8+K6v{-x@avE#HmEHnI&JueJgg|bIc z!x`BlFgf7uK?LdBCkJznwDllbf(EmWaQwAOA((Z@f3_q-1@H8wN+Q%o`iqmP;@m^& zSV}+Au*0!-3R#ni&KBF{QjJ*Q%4)~Zdv5!f0>OfIIX5`sKOWvsWnej+^oMXBbJp=8 zSw~{`4#A>X!!8aJJfY~#;vv@IdwS0^RdAH$QFMG_Lus}LbCcTMM8AV%xiqvLr3T(V zC-7N+$Bl;w5Zbxsz<zMe=XXo+8~5_JIULWK=@oH}YwfcA;#PfD^`>mjI(Dp`PJw6= zJ!u0y1B>lOO9CEfJ+3*N7-)(clWq6TQCW+%vNlKJ{-&(uN$q12PTF!(;}dRr0F6u9 zTrh5ZC@(I8QP6CAb88|eoMtrF-5<Et-rIXRURZ#`M4JjQaE*aj+rgs7Jj@#pY|KuX z?q;-UQER$kKdZayNWXSDoGp&boSSWLNuW(iuCZVm+9`*`|4oc$HLi`3LT7Au1TF$G zgghoI$!f;8vBc=u*gL8_9_U`6yW?K+;`X|XP+sZ)%EP%{95WyIJSA9g$gvTFrn&9j zzPqc${A3=r%cx)vrmi8=tt+Lke100^c(+*`|9ZtIBX{6*+|fKa@V-6JOglLuX6;k$ zV+uMllK3w&vP)7)Qh6DWYqt@4yZGd`W0EV+u9A-XdVy)7v9D(AbliB9QU_KaO7Zsz zd}ec8|5v314tifl(?8S}7w{ZHDM^iS>p}&GGJ{yxi;LtQ@qZG`v$y`9?#RKNJE;Mw z8(P}pRAWYC!OKt>IyhsxdHh+c82gKty^c(dW0$>&>F$=Su#7I@H+X(gb#xK)S%IO4 z!0L9x(QrTFj8r=#{+A>EFbCp=ozx`tDsA#Pm^5v3grYssv4h!8#_eEsKTHt?8JD-D zcViGg$2N)fCS5+<M+N7cZw?_mNO<Wv>XGz2Hc3uBl8<6skOK~nd%M%?84hyV63lTS zfL%hy21mmjiRpZ!)yb)0WTYiQipSV!W~XIRnz7KuiDqB6oo=%5NyP`zQ)D=JPQ{lU z8E)M`)L)mwARZ5bC7f8?QQ$2UKfPO2Sz8MT+L7KU(rdf9<7td~zvRg{wZnt>D!%ND zElPc66lRXd_$(p{o+G-PNv%;8t)Eg@iO-*4iV_ur+bQCT&YWy!NSf5j*QzX9PS&qm z5@cmOdfa}KZ$)_YGH8y;8^LqdcedD?$#c?6gL$0%e=LaE>zC3U#5B$BZp&*)kj-96 z5BtRbD!sM=BJ|b27UID%iwuxDQ-U2^+IqQ+$4_$^XZCg(eNtV<ub^3dT*k07T!w>( z`*i4i?wK?&RZ=DiD-7az1~V#=WrJltqh=y>p^o{;K(P=sXNy?nNHK%u%Ymw)YX=vF zA5nUzJ4!7uc@jZo>!c|##^$)aNv2Doth9=LoLg8sIO2AaQ4X>@3uDLur?D<4Wqoea zx}09jc7i#nq1@D9PMR`y95{rnEshA3iB>3q1}_6;(I}bPOmd1faYnF7%x>(VNj&_# z@#&j$c<N0Wn!Z^ckUavQF{eplfaP5CqvyDc@iL}5uKyv5=V6uTxc){}1xbZLVx#3x zQk|3}NN9Uede4YA4eN$QqZ}J2^on>>ZFzP#w<+%M0OFK~^vPMmy4W{oNzGZaj`;de z%*mg=dDf1=`!Rv$ZowX{Gtjz3j0vF7gw)^!drK@CH9`}TFmmi2Y(7}0GfqgxP?<Ri zb8IwZ9+o8MMQ7RVZ9A=@|4KWD@-gf)Qp%X`*yyqiK}A`Ic2_aAwm0ku<{rXwsVlC9 zUkg)^3Gj}ziiu+;3`d(&u!QR3@$4`yCAGxHAk?<+XtT?->T|T&=~(+3o-MJ`3EDP? zCfK9$`CB;ujeNGmQZ9p>*(St=n#rdqTPY$<GIoLr^8R~Kf3pgtkY_{{GN~n2CJ(Jg z(1Db*A)S<hS0-V5urY2s`DlGhv~xl^o7FJ*o$I3|Rvz@KoJp#jp-F>7FQ#v&gc;kt zDbi>s4Njks6id@R)YeT{R8!ywaVYbMW9^d!mT5x(L^flm7=<`HG>sRJ5gE<Y7*9>B z{b#kOZ{~$!jy!#eMq$%#Jlk!m+mOr%x?ZQKbd}Jwq4buFSD735&*_Nqw9Xh4nGB|5 z<Bg2SLryleX(-YP*LPo+cts@ZP!4X1W7<%E0x^*B$dybNuar5(0Hd{zLnF!1b>A`L zJYIFi*YZ~Oe=Fm@^7U7$u0xh{$ZYE(a>t`Nu$X6-)&JWHTVmx&*^-^+Tj)adNocTx zE01tJI#hg_-ZPlMh|v0qh+Ba+5U6d31hZo72qO=R?Zjq<`!V4#w$p7{VxY=yk7ON- zaLTJy@DN{WQE+*h6piqm%R|H+oW`@n9-OA0C3(!^kMk;Vda$Rh(9Y8&)_j_LV|Hyi zS$Ud#qtI7ch$fRr2CS#a3un5F>a$$N>HS>B)zDYa)c!6b<7}7VW?20t)XqJRgE)Bw zS3^8+xiabp4sqaf$e+dt-cR043;SWQDffsP!Q*J@YD{+qv(nW2DJ{5JMsVJ7<n4qp zS&wPKtT6fRa2yPLo+_q+MQ5QG^+1@04g;I*Z6AaX&P^GRmBs+Tc*m;;FF-O7uANNN z-CdO?j`UYiD&v5Efa>tqN~2C{l&SN8+_YHL@2#+Hn;8s4<4or2G$M#y5y!jpYJ1>w z$G^(PK^|pfgLRH(m6aS@N8(4fr1;a1Zegf-UwU-XFFI33d^@9#WD;?5pZ;pw&cFwb zjNPP_D@Ar}920tR_g}lOwu*c(G)_ejdTGGwwDjF(4n=#pM~0xr`GZ5v>02^d>dpXL zuo>BR{VZFiYhB+=7i}-5?L1NVo3ZbuZy7Vs9-No7tk;lvb`i^TMRJq;|72Oja@ldM z?k8`eq6f+2dKbDNp>?**NNzivHLKg@Ia_xICJYkmdbPS`=v>{8iP{6wJI3=M3cbao zwYe=eW3M+Rv?bu_XS8MVSn-`HycdPn8q25{6KZbB60>qf+c^YpQa$qP0&<K#83@fw z<9(I&8cgPX5X(uBd82|fw}RsgsZ6|?Gwe)1BZ!UoezqdJnkLDS$Rjc6;2R#w>4!C< z3kpM5C&?k`GXfuWa|bVqT%8(p^WPqHr-grs#T<IX$fo&QD!!U!+C^rmhlQekOl5`y zt{rIj283LxIJ$F|`#nshX3vf+>&JX5QaCWMxF73FI<PX8tX8U6r7{gjt~bWU@1uN< zh9_iPST(TUXh*|urD<RV5^Iy)D!yvH6X%%u&fxqs&Unvu`YvSJJAd$)`2)rB_`n-+ zR$#n(0WS}vC{rv}ud@63<0_7~m5R--;H=b)mx8mBR>yz(W^e^B?e<mKfzKS*Wd?In zLawCUf0ZSTPj?P7Qd~xnyD*$ai9>n)%!o2m{XHv=FDMMhqHPQxwVhTNewLc0Ol@SY z?JpId&yr~$gFuoHCsC5~aBq18Y)vuO%f#4u!%@fD_hKklUO!ou*u!n$a>KFqCAnFh z6j$-ZEPppSUOlO;TfmdVY0JEX*+aI9<OLZmjvMboj1{U07r5l5Ssq8*XdgMe!OF;- z5S+*SVRYz?;L5nb0SAUr?ZE`!=`A+-@QX41;6j(tk{KsY;<krFnJg8=1)A&`nJLR0 z9Wq8Sjr6S+c`dY(C^;#KigO$r(_9$xOOQA)HoaxRr=Mc$v|mRgsYId^q5!Sq(ZbO! zPDjJJ#MEL_)26?&-d9Kq3y(Xb8dl)gmlV|B6U79_1d8K~)^3F2v565bCTJW;%?siK zgqQWac^vQ@H@z@Yn;Pzh`6siM0xOdYUyl|!<j`n+k-BM-@9eBX+{NvQdP-?Nkmd?b zM@22_>@1~F-^#BErP!w1T_Pl(_nJa8zb0h2gnD!cU3ij^DS^r|GO><u0J-28DrFqH zYF#XY1WR@;Ds(@T)}p?oGL!pDj%Y<HSSniTI6CjK9VtE+>Z#LoZ0u#~srf*P&27&N z_H0pKYnk!gaVj~xB`3{8$vM`RQw1l<R>YWcp&VZCMzk0*g>E~I#3;&8iV_?hSQuw8 zM9>>plEz;h2UKBe`+LQgZLN(1d00Yq=evxbL7Sn!L1)sUa|gMMC!u$tSo{V<8Tfx6 zk_G3`ycD(O9GsWJGI?QWc|QiAX|jktg@ro~g%8gOtG1LeX@oD1)Gi6-vCKS+HS68` zGxpZmbJF+P=vd6;F#3QQgk`DWp`WM_<_oQud9iY?R=BMmdyA;V?6GUPtw^3V#^y^1 z+N7N-RY}vO@3t)solOOYzF@iCd*1pp#%?gCW0*D8)#kwd4GXD^6>(Rk?+k686v?&w z-=wEr&PbgZ$1Dajql5|;#;L5I7rNFSnx9%2E|L|D?0&O@*V=>gQ_Z!s=zPi`&X{|8 z$R*>j!yJL_?(iy%Tg+BNH6@uI@EkW}9#Rok(VNGa+Z-U7chJG&D~``<E6P_#oU7yh zvAmEXr=C~zuINoK4QEK{IX!-G;EON)-Kpn=b&L^b1itvfN6$<OjK-L8#h3W6!=Gt) znmOjr4sDq|2P-I~zvfW8#E~oZWtE-eV8Knnf(^lf+k*u^2^QQLEVw&Za9^<CfndSI z!GcGF1y2MEHU$fw4Hh&73$_Lewue3q*;sjuOl-KR5z6zok6C?_zZVa)APX<fAiD+T zBW<-4a~h3V8$y?bUJCl1*az>P$?6#6{IbIt|Bwv;mhzkxjz<6XSz}K3+j9aR#bs>v z9~na=Sz*?Jvz#HnbN2^q7F^~%z0ucrQ~KGCbt4#eGO^<QD*kmJh1#1xj0vr}<fg`{ zm)w;8UU1${$GV<K#C{RH!%dF~jv2Wl$JcvgBzEff4Oqm^3Enhb{QVzucK*mnC^oQ# zG<|(TH#JO^4puO<ajm)wj$5A@w2$01DPwg~-QLjJOB8#aGr+V*UaYf*vR<wxhQ~jB zJ0mL`yh8+nccjSQf`jY`Id1t%hRD_X8gn9|s9^4%VAlQ+|5<g;;nkOS;<f)JB3aJZ zEiBMGZkB;4l<Q>n7~35CW-#kz=8w#ln1I@4d7MeqaTXaXZ0Rq}+P(jZjLpl2h5Y*i zFGkV}4#jTH$hCX>XUg9*LWOanq5Vko;C1P56<@aAs1h1nVY@11>^?yD8b_t9`AYVN z95-Gqyn=y^ahpR0$AVc08*ev@5fjQ992~)Ph1NVO<UbNxeK7chsi!RGy4<~?m)2#y z$$R6r-Qmy_a<(`9v*t)_`mtbYb8uC2TpKNtSA>J?du6>W<-5g+az^f2FG~kW-`hf9 z)YzD`j+Z*tu@kms?QLqiEM#P4rFc`v8<MGGVr=2=`sRhC)|QseI!A6=^ZuCiN%s0? zx8xu<H8jp1$ZA(FAz4R6HS>3W7<y@UID_>H7QPNPCN-0@*lodHq1T%a#PT?feGy*W z-`K~?-NTTydp|R_hGt*FNH&hzj*i?e?@75wbUR>6O=8R&;6IWv!q<ZxC+tI|&vUkY z$OJKxdr01dGk9XCrH}oxUK7dMLwj)Cd>X!E3U)fyig6>c@Wq3MJ7yKF`vi}-9gP|e z23N$DIi<)^BZBP3u?RS;^)=c>zU)&SchhVm{(&#ZoIni_{mLF?SSuUFA2HUF67DOh zZIz%tY>zV__^yli2dki2Sm&UYf1>QqILq#vLBOH>QI>ez;rB2SX@;a9r^!$fm+{_m zY^=9UW=5b!n|4N(wlRTYUno}!uPAMU1ILd0&X*^SxX!dB9~Mc6@R%T`?Zj2_<*d*# zvSN)$EwdNMkR*d<D0!AVuEY?FJ(N7xy63^Wkb8VnxVzeg2^kr|rgtvHWhaHEjR-9m z#blBt?A)Yfv7rS+*`i2)Gh^?v7-fAak;Ser{4CR_7`FMT>C8h}dKgWM?wvn9vV0sn zrED6pF*<1+tA%*6>m&x<csQ{}V4HUw9vdG11uQ0vnKX(tm<3H6MVkM1GP1H}CLoE) z5<Gv&2t6)Eji8h@aA-6xS$GU)(J)g39=0`QTwwj+5O;e*2}QxIy%nPyv$mJrP7S!j z@z{JO(=>pwcvi%@!-@EWj?E54Y_ol5;O7qSI4lP0XY;)IVpdykrqGU1*1lkZ;{6WZ z>;<}Jp3b@6Wzgg3<u<7*yW{s02PU~IT$mtbV`>Yp2X@1k$OIdUFK+RX#nw<W=Hq+` zu6o+g=jqK`EF(MX6W8wW^;l<LKgH&{V(kw9KkJ=_)F?$%L*lh(yQHY0?V(p?ofQ+B zhwl%)7<fO{mSsPD--7uRd!9_|?Ly&O>2<N>X0|*0b8dOd=ZVJtdZ=YuL({c=rP;`u z^7@qZJzd#jUnJgFrZw!i?qhjAZIN#TjwuDF<QI;78>>$Bbg~M}Iory(saGa!TofpD zEWqQUTZOIl3?}?yRVNA4PZNc6Ne+MMS@OJYuMqnvuk)g5cQmw9vlVtc%bHY`l#)GF zC60#IVCf*()sY~h=k@TNro5B|^0I|1=*p4TO&`frS<{-6efBT!^kLxGd7|@fQ~n;o z@}?A0?5MCY{l)X%Jp>5OJLb5#Z)bMwG!?T1agK%|mOq1`83hW7jhApDL~CUXbu`G^ zwaRFRSSVR!)Lv<vB-|0>8<gZ5MeQeuK8z?4no;T0pRh}Gm`ajn$74z}cS-4jYZH@z zjy$lhw@y4T3|!h+a6ErT<WUJcU1j`OsE_2(jFty##!V^0^pEAKOAHzDq9Dgje`WMm z*=@`^W-6v4ZkF0bSH4*4EvsLtDxuBJ_XKT86)|&Y7gHs7Tg>^7bOfwRt+!#oFL`W? zzx(=3TjmuQ<~!_oKE|AijpD6{K2Hlgy53mJE9CXDc+9gGjT`7_Sjc_Z%QPUGT=)@b z;SEi*9Sx78o#*%A-S}KPnY^FtzKU^;&)GzR4<V8dKeYIv2g$a(tS>Jv6-HS*!eunx z`bZx;`D0|Dl~auQnBP*B)YuT_sX;5ou((my&qw3Hf|LJPq)(hFf94p!-QUL&Ymju^ z;qwW@x`K!qh&7tt`Qe_*zdpn8#ZJJcoo#;Wog`j1lxU?S2MKJJL>3k98I5;^E7%~` z0eOR`P~04TNWSQ3%sSFhhH;3MQBVJ(4Evd$TV<%X%7EeflgeO<sr208MLhGQ42YR! zkZfS3X^Qfv434!K=ygKdk+O9<{{waY{bxrmd6||ZIn59E?F^8p1Kh3y9F~$%b^euR zfY2ompe}-SYi!ta3_E*wBIsu9*qUT|xYa<AU-m4qmpu%#><Njg&rpJqC4Vn7p0a20 z%~#>p$4cY*Avvr6fz4>V(&q0zZZ6ic1{iGzLvOb2FWW8=p!_BOA}<FiLfK9Pt-Oeb zm6s;T%YK+;VTtN%d1=QtIxq3xoR{Mg0eN{_+KK4pB2yQ8KO=qB9wU85s|F=LRK|0_ z?AfX^9wGly8F79yjvt>C$IG8~#xYpMAwI;hvNMhfGY<OQdShMegow=MxkZBw4Mewq zm(qE5R3}#8^(#{vT@i!q3C|~y?rgK;9lpOJ0|Ty&&)KPO%&n?Er1C%VsMva)N%EL! z8>n(2{i{rVW91ItC^@0nzO;%FWdn(?Y!rV8a37MbTcwSUmuG<COEbHadLp>PFR2#R zDwC6ZI`1>mx!p{KE|EU{f^_e)93o<nqk|XFcQCWAd$(%TG9u8seaL9z=FD|EddFF8 z?b)P@o3gr#PoQ~9_dqVHi-*(ju75WEW9oSBYzbrz2sZJ)PkEyx<yp3t<lNyLiHA(j zcIT6Yo2+ckaWwp#F+c{RBMe5T%I<b#G1(rS)kS0c$NckjPQy1*zq1=LoJy@WHp*Y# zCB9!jdakcWj^*~YTX%JX>Yaw^SZ^EW^u>)k&mWuFcG%4Aba!~VMAup3kxirHr7|3M zG`X!}J{89YdeUxtQ-Mu9Ez0&vA<YV8F5SmTg)Cr!b;sruBfkJkk-mZb#9uwS#!EGa z`io4c{W%GarNNYnl!CH$VnOT;Xg5L98Yd2P3bOwBiJH@;Fl#+SB$Jkzk~A8bb4dV% zNyCl&z(W3vi1e8SM++>NKW}7{`ciPsA!!mk%NrYxQ+w`kF^j|2eJ1xZ2;CkpJkvL0 zXPv!%>|9^$l(vuRpZgO3u_i;JkP|Q4Ce}YE;&c5OCV#H~;`NPRsR-n+%=qd*o9jzh zpJQ{i{evl?&*oZh$2%Tx{}I!JWK!zS;~8S+O17bAQ!KF~IEr$pZfJhxSQP#l$|!2| zjgEvjaEE1i+w8j0EYo52PShmMAq*CwExw-Xd#+D$jeXVEM`of&#AfH+#Fnv*#gg{6 zx3R-0>rZNRjH%$7LrJWlkxFC3F*44}lskL{F^)tP;!#vK5WTy@Vm*>iJ2G0ZU`u0C zJa_n)NYHLlLYIsniOB0kGNG)mh$#w<cj562?VRs3<rR%jDrF7fxW5udW5W@~gR;RA zGloEsRF47ithl&rt9YXaH8upov3$$uUm#JuPB${+XKhHu+V((4YcyMj3L{~qskLFT z@i@a=<WZSwne(B@qcTYfUqzQ;U0n4rnZ8)B9yApiy5lJ|A<8f0%T_Gm!Y>;6wmbg? z`Btus->ov<P)V=n=a<EFILt{V#w8s$KS;6fk@;5a7W&U|d7y-2q>D-a8LK&TR=>kd z?i|k>Ja3S0bJVY}jrH}FrNOc!Jakw~L#R!~RrYtXp<2nE<V<^7>B%!@5Ve9rMM-6{ zv2Ny;m-RJUWab!R9;+vOh1BYT`E(OK<j+JpA4`@=&&xcIG{Rxx8u|9@(f!3^wqxx> zl&y#v%jzS+dF>S`*m{=v%j!p4vL2oYiz(FMht?;I-Qw#uZj~=KyY2AkvwgAa&dw&T z#)gNLDn6A4EUGxG!&6F}N{KsKLkjN^OluxSe-a2j-vH<5yO|4*qtJ{A{l?5Y;_I#^ zF;anJ=CzBf-JFe%KHJeyq{?O)%pNbV3&y=Nck%V4b%m2)&z{X2k$S_UWxX(-cZBWm zBYoBpp}WE(?MOe+9>zyzuZ>wrYUNh?Xo|{+{{ogI!e7X0rwdl97;Kcr%JOcXBqY?0 z!HxQ&X3e32ss@tsa|(0Vdvfsz8zyUaj<qlHH^<SCg%5@uQ}}rIXDAd10>l1FojV!^ z!(>gkqMK6sLG|F3r|>>%>6tJhJR5_2#@lBD37XzKVJ>y?ILQk0*{_?YN=w$EN=n(1 zB`<80uv8VpvG!%0jg1l$UrqKY>xh6Tu?&r~^+6=0aQ4>E2&ocRiJCJrdO1pwghPEq z&7sX|z+)V|&>y?anCoi$ct&`4J9-Kw3%`Dqo$>Ru>ERcm{7UT+qih7+>EZ6E^d1qM zJ$t>q{<Gp$44v0p+q3>N41=yE{rb<Yy6!sZG5(dIOME0-VK0*oD%p5FG`<!eH_sJ& zM|XK$oQ4>dX3iEGzd{QbWvzt5OR;5K(RVTCoi3d@bECn~1nUW^wgYK4>RC97Y^vg` z>CE-yjyHMz3fpIu<ZVe*V_GXISA0@*?^X%c=XRXdBw6%aCKbtyrc7RV%RVw4f$`Eb z4PSCuKk+?m`pOG^-+Lq)dPGmEEsgMjLE^!>kql})jnybGPe2Bn9Dg1I26b%CIaN}! zq^9akr?IJ?;QshccLKC%Dpg8g2Eztv86Rwzg}n*ykxi0B*VUzgE)8^Ppi2W?8tBqM zmj=2t(4~Pc4RmRsO9NdR=+eOdH4VI2h^+zW5Of^sS!71NjC;AlGdW8ex(j+4auslf z9P|YDdEf@{TBr^xg$ki0{GCt^_i{ZzTpM(JL&337Kj<rDQov8ZKSNh>p93A>{@2j$ z&^qWEs2X|}l1ml`dO@d&gG)Y%?FMy+<l9a8sFe@0l<fi*7SzX@EN&=U4y<-{*>Oh) zq7Na_Pc(_%q6w$64N?or;-2Ww3MX=w-sN*_sS`Qh^IYg6C=)7%)<DgWd~CG_`rl&5 z{fT@st*?c&J*OL8={7Ci6|~h_{2q>yy8*v6{EkKWJ&#{0ez!;Yoh|(gzf)cR8~fxM z+oZ~xMa7k-@vU{*Wm*+G(c)ILEv~QI`#RBL)of)IO4;u0FhZJXtQKF>&YU;O+ZZeU z?z-}2SO>$1l^l86VS(yIJ87r3;&r}+H*I^F*1<B36Re00)7G@2(=0M3dMZ7pnXybP zO`G<%w4F7=pJ=V^;h5!KOo&$d7H1mI+oEmc4K~CQn7huiEYlb&Hnt{KE}4vd&6ynU znQ1uisV>!CI#?z)%_m|XvStZJ_T0r-Bh2JPTS|bjw57h9T5X8Wa7t_wDvQ0|shHBt zH11Lsy(VK|G1HhYJX6q22)key_cEi!CU}-IMrp-FZI#t5w_GuzEuAI$MU=~oDplpV zBeO<9e%1`jYF)n8+O$O#m~q5<;Ka$A<u>wjq!x>PW!ZH#Rg))9#SkcZ9D_ghUYC14 z*)?_9HI=2FI(+kUvZh+5@aEWNc$O&BZdZC%VnZF*bib!=Wnpop-;;$ILZeRnFz8v0 zfOy;>ZWPcdF<-@@%*!E@X=F|;%ye5>J5^Wh^6Sz-mj=2t(4~Pc4RmRsO9TJwG*Di> z3=`v}&PA94Uh4FTnO<xQn0{Uiv}0M)WL0{qm-x!OQb1o#jT4)|E1jmF7-KJGmR4L{ z;=!<e)uNh8Z$})9F!!y+>O8gB?IpYwe<kL5>xwHc)cg`m19b2@B2>PeVZO=#RB>7M zGPUJur&v}HL-%6fzRKe(t10b_cRA*BYnD5`SX(C#B{i5!F7Y|BF3v>LSyJXHS^9N5 zo1JpX@`9E!n}DoE$oug^c|o>8EK;b~Jun65cd^0Mgq+wAk@XA-zfhx7kOb})l*JFZ zz<P}?LHPRt2`_6R!k?uvO%VPDAle4c3e6v_`8&aA8$4y2KUni0)o!9z@vqaEBS`%1 zfTS<$3zEKibp}&$eis{D+mVa5!9#Vacm@g*{{z}>#lKd&Cu)8el=Mkb{h6z=pCI9X z0z}*3S*7{oG=DEBHdxNk{*@YsYW^nePSSXj#;KZr43zX`y+krGL!+!)eHR;CTak;l z!Lvw*KTnYS->2QOCL{4*uki{&_y++=pZ|(~mBup#;olBK+u*rI^T%rb9#G2PTl-gN z{GR4Nq1{&dT(8|zH2(-F=}SM5{ILw8@N}R_Rf^gEMr!|M8ZQ+je=h^kHh30m{`s2! zuy$MR`v&dK*8D@Dq)${T-T4~N7R2*TAle4cwVHpq=I;Zg{AX$ZYK_A+|5@$kU=<br z%^LFriT^kd-T$X+zO0jd7aLrgk(2ye`YqPs&lM#8Uum}tFQVTy8Z!mq9{?o0rJvcF zFKcwdzZHn?|0^|rjOOnGqx*lk<`2>QKWH~msq}*yCkx{F2_WgmX@9kROFsLEKPbO? zlJwIx->>l!LBhWXME8FlO)8y1g76>IZmWGYXm^(8{|%J%Ra4{7Jk9T~`9A}r`~Paq zAFugufzkcHO7n+l{vWkl);=YXMvb|G<nMDp(zp7*TK+>$`qOu@!L<#!=>A`VThbXI zNc_LnZY%zPc2Cg!4?#(v|0>)ZjjBBp{ztf@`~MF#KSL1y>p*n>=MkvlQS}9XqjvYu z7}9v9ApE0%q;J)a+FBt0GM+Ypa!LJL{eQW5;D4DQ;r|Ro_x~m05B~x|_>X8eQ7Hc# zHBJ(Q{}CYRbF26ZG@c`f=UqT_|G!T2zpwf4g3<lIM)NP!{O7gXp;3-hko-*(B>t~} z=>G2(fA}fDcX|FdBPaQ{`u{@Q65c6D{PzgrRu@<=H=s)p{`-K0xBCAq@rR!#2>*vb zbpKx={_sZ&!haQr?*C=t4}Y*A{KvE#FXg{ZV~!yFe*luc)&FN|ek%A~p8q?Li|+rW zI{ZLE;{UC7Tk)^e?unY;3QGD`{^n|aKh6Is7~TI@Y5q9Pe-n)E|CO3QRP&$K?j(&j zX`HJ0pMjFT)jwxw{%PQMdH(+wa?$;Nkq&>JAmzVbyJIw7uki{&_<sQ;ef}#YT&3|$ zLHKt7(f$7#%^$1zuYuA1ze4lBr}<B6x79w^Yxfk*|0gKvTm8RK^G^qxRHdBQ|Cee0 zrGn(|Pe644U#$7(YyR)F+iKr8Xm_^e{~eU{iAt4!zQ(f!@%#l4-T$xE{L3}}9Wc88 zS8M)o&3{h2duqH{W1i-J2}bw->6+gQ{4US`Eyzj!E&Uej@aGDW|9iFDrg4qNOhNb` z021EP&uq=_tNFKq(fxm==8w_*-C%V8FW3Abn*X?Vla$hLP~&7lJP!kszSTbqG{2Ad zQ~%%g{C^3#=>G4~;Rgv4|3lhswXX*4&eHrgP|~;h|2)m_ulYX*qx=7A%^$D%Z-deO zze@9mY5p_Xovg7@W3J|Z0ZRH-|IgR_-r#q6{<k0(-TzB;_yK~H|2Nug#UIe_37Y>` zP}1kWQo<aKX9*Ji$3S%d|AFRbX#N{ubpKzf`RSVfly>*f7}9v9=6?!G`d0lEY5p1D zsrvtN&A&{L{JjE1_x~lDe}U%zUc0UG-KgD@H2-5z(kCia{*#~ozr;Jb|DXK)e-D0i z|F6;UTqsDSFKD+z<1HGe3Br#6|F7HNtPvZQ{zcxBy7EP=C6%tMF0Lvsads{Xd7W6Q zG}m0JYGo(&n`KUl>!c+g6^&ZE(ea#;e^MMB%SmQvSr3v`A~PS>nwG`$RMq-cb}n^^ zw{v;9uS_p+d8OLrlJQvjq_j(E8|OgZhpvO9O?;cpQET0*+FM&*RqIvT-@^t^7;@2= zF=K{ZJYvL%Jbz`Sw`Q@AxZIO--Px0;sv&Qnd&aa$Gct3<Eo04uv2)poUc%0>Gn>6| zmB0LH*)xkWXJpOIEib97kx1s68@k@P6Z|ZCRr?A%jE?HSDlB{6#=wbL`B%=IrlzsP zZR8Vrd2yZRTjQFWwW79?wZyu)`DLEUN~gJhtMa2atBrw^^YUj-oUEou0}ChT%k3cV zT$bgEt7?arSC>;B@g^Gv8OGBPzPr-D1XHNkXq}kvK2;d;{>Csxlk+6Z!2H=Ny_5AN znvsM=$Ii*stZ-IVdPu+HmKDXiI)AOtQ)>J>dbQH|&T-5wsHV`89V@8O;bVUBVC4}* zvMhEMFRH1NOmbz_)v;Vl$eI#()l0PPST&{TEY}39T*_bO%@b<;m8I1e_?$KDpF4eJ z9;bX>F*dRLd4s&?B`zk;<#pu};c#bSVh)SG=cz=`bNXtW7=kVFR62E*RhEW2&#UwJ z>Q*X#A~#lWqAvHUxShpIip#5q%IflY<x8q*K1$fTw7j-cNafEglg>R^kaB9*3FS{r z9DIWJ;$n(WI>Z=MGIo$O#z9^M9jJxr@v<0<g<U4bq6^C(GreWbD!*53+|mlov7p#l z$`>de#snX$+e4jRe@U6M*z24%*2w2e5f+t^=!{VNm7CSs$&oT>-pU$(ozrZJC-Oz6 z>*~@#mj=2t(4~Pc4RmRsO9TI&24dBF%V3t0<()kT><KOefv77+z2mT6TrX>n8@|T3 z86Nx}IEBAV&YDi)-<?IGz3@)FY=-!UPxQoP`XBoSe>s|^>^8!wg;7(;{Uh>Y?+oDl zA?1tWAG^yi&g*1%+%?&^*Na1~aj>GM)+lh>ja(z&a6-jKwc%BF9;41EHx`RHmrcDV zJ!q5|7xRk)8)y8~8+qtuh2cY5tuaQ)b<=V&N^XLRwFK!(C8PEXRD9ix1;%SCwn*f9 z&Es8D^X%-cr^;zU@FEd45jN^wBG%2AK)4>pq1Y;NTS6Wx!3BKVUuV=9OZe--?PV|K zVx-+C`HG)tJ;ntPS3YssjlXkn{Pl)f4Z}A^<zW!3l~1w5@sZ+*v|J{yn=#0!BHUrc zD?(S*l(ULFIE_+Vk_X9I4R<T?8w}U4+@)}Qn(IM!h@sY~iMifbqsu;m^{^yE4zpjQ z(v&}D9Xw`?V2?4$XoXjAoNrvAO1GTSdW_-fpB2E&=XmOH3Hdbjm`5Hem9}c|m%4Ks zlc{|-cav4!`^cwANNZS0tdi3zT+8?s#Bg(WOYNCBNyY`)3>r0;>OAW1<UjRh52>%G zd~(Y_Zkn2!K=EM}K`kUiOyIAWI3&ODzWqvmhpSUeTwIoi>FV%M!s0hiE#Dd)?AKls z#V5aJdCXG+@64MgQ6;~|Re->2uf4NV#Z34DVt8%dJe?3u1YRrHX(Ye%+Rh#$4DEK4 zBC?Mg@e<%2{=f4Mam{(=QE?|1s0__3m@{(Zlj43&+`_*o;~7c7%ntmFUI>tuc)%}s zruQ??NLG{pQ6Z2aB~WhoBJikkOOcd7Z|$B(p+q1<+~l@^QW0X#V``<8Tgr}r`>|)> z6JY@Y^C<o^XNg+^6wE8Y9jn|*0FeTthYGJlh_+OC733YQHi_WBb4i<3SN-=R#|=lM z-H46sr)e~?{8Vo)L!Co>vMeRbQ$n&-6<e>V32evzWMZt1J<c+K&{u|0LQDG~(quav zIVLs@I<LV*=7e03jXoq-eVl?*{HceDH*H!0f4NodylG#P(f;DEjXmuV<FNw~<K{gP zW9hbtk+Ugc40@2%g>K!)kHelej71FYQ+R{F*lq0j0QnZ=A42{X<h{rjAzJ`VMt(f< z7a=dN`hAfn-p3w8{$}KtBA<i&AY@g~LY`klm^<aNLf|$&K)wa}hmgMoc`x!s$QK|# z+1O`{NB$yq)(0^T^hLfM`2)!BL4F(Zn~;AH`3I4|75QtBUxfS=<S#}(f_wz|2=Wo+ zBgjXPmw)^C_cZ^0#6KCU-AcY4`2)!BL4F(Zn~;~-A4K|Aq_07G5z<qTzL@wwK)wa} zhmgMoc`x!s$QK|#8Ts+ZUxfT1<ohB|ypKJG{LRQOMLq}lLC71(pR66U_5t!O$UlVq zEy#P3FG8NKxNkD@<I(0thT$EAHv1yqj{E`S_aMIw`Ax__i2Q@d--`S-$S*>kO+`14 zp-2Sz2=Wo+BgjXPk04Km_K~5dsjeSUy<V!zO^<3v{s8iOkl%*<CgdMP{u`PPje3vK zg8W0s--5gs`6A@Mq4^N+9^*0OZ$^G8@;S&4LjIc+v?uZb@-4_eg#0bYqv=Qy@~2kN z9(wR&kpsx@L4F(Zn~+C2-=Ls9DB>~bW@sst11bBr;Heb!$tRx}AAb0u@zz^!8Grus zpN-9%Hyax_ZZsZz@Im9QyY4b>z4cb(h8u1$uDRwKqq@4<ShQ%7QCL`LOqnvpxcu_V zjf*e7*f{_E^NlmlJk#jev!~JiMZ~!8?z{i5Jf~=0-+txFMQ&&xU%wPn|M|K^G*|9V zk~o=tlEjrK^7E9lGm0r!=9ykvOk9v9AZ(Mba*YsfxwOEPDct9(okU$MErFbP2s<yD zjh}d_%i@b5!BmiUPV1ED<g3gf;LdZOC?M%eV9A(d4S{4XorW2K$?gzH?&D1DmDG`e zDR~y(3h(UIt7lIoKzLe^ioG*|<Wxr=XYXVY5I)0olmO}HCH3s1Vz7$c!Pg16lX^S) z^y!_XgMTf&+nto$r<bE=k{P|pN6A-SdF2!-U>*X!dlA72d{ulzv_Nudub!H(BA7-s zkmF7P2TF(%n1+D5bPPsPsw0}8d!m5bNOq)lBw(h{5rbrrpD(8-Tk)GZvSN@d!b$GT zpvZ}qrg14HsesAy0Z#N~DKgscfB3#*#_%7Sr>M6X!|BADff1+P6m7W7Ig7j}#{3VL z|Nk%1SJza_tNMTJ`cJ1XJFLS!EB>Q8_>U=HC!ASYDto+R+0JB>&skl=9+kO4=+WDQ ziH4Rj>X?g7fGhiYRZ42`5U073cCK@n)3ZWt0-l>FQBT&tBk|QNWzUd($jb6+k8@C| zFm-%7XcW^qST+__CKlKDt4oJ;r2TbSA|f6>D^NiOm5z1FZlrVYpwbHm@w=6kK985+ zYClh=`}ss%?Q<@!EMDUDdVIqrAJhE4TEEY!w({_!SY{-`n+xT8e2B=;kqv&cytvq3 z>9aO6J2&Gbwy2O=PVGCpYrMW;*6tqdti<m_(Q4DwC@QXFA9u-EXYDD3<ku?v$fi_w zPn9;xirH1XVATaA?<`lDUq$}DV;mh7yU61#7L`fiv&fEAJkeNsP>MXUG>WIh<agaC z71a<w37=P7#gBhZP=oRlo~d`{<8?J9^79*Zon=d1z6q)IB@R2)CF<|khmHQmA+f4> zsYh+dv$0y@@lX^cn<#!N_iP_ql}|Iwl&x<oMQ4fpv|Dz>Yt5`A(v~|mwQJ0#Adwix za@u*Kiqx6!BaGKqUgG_Ryy`Y2I?`1u+R(S6Aj{WZwa8QFtXZtut9Pt)g$epMNi<^l z?UDGI4L7kseTgE!SNb|n`d~-CJ9VjaHoVqb!f)NFl>%?^5@PJoSf`-KB&zQkgjwfY zcG2*W!!M%$PN=C}Sy#TK%;)U**kq{F`rO1hxw=Gk8mSzv@;nz$PkATf<$_vR_Xn4; z0&-oKsrZ665wNZl>!uUsIU6m~$uaMQFVuB)Y2dqRK$_VxR<)je(q-HSt%FuTbD<n) zD3k`pLG4etjD651=ssuzv=;I~rO+%W2O13xhSH!o=-}fnV<+@5B(iscYvmrA3r&Sw z&<Lm>Br=A^L-dio(6i73&<05O=_eI1o~1Bz-@!2Yb04SqKZ?3<<lbCmGmM*~?)et6 z!+%56{STw=SzhUoxh?8m76fHsPzKhUAZPq-tkiT~(jSLza+#}pAfGxKd!BMB`A5MN z+-t#J;7m~7JV$`N!8kAte0ifwofUK+cqZ;jP*z7rf&IWFa0PgrI$8-H0$B<&_JPO2 zy`Zc?Z3kuiI32Ra3dz6Ri@qc+^r+5$lJB4;uTnO71rxmqil3mAS9qdxizo5Q>z1G_ zno7J<KJk<CN!f(N|6EA?FVXHy?Vh0BZcxI^(Ej-vi$IBgHY90RLK06E<b-M=(McU7 zd6jaAd_5$2UZe4PQ1}5z_-i4FhdO7+#QeRBxbJ}^zxP3s-ftlBe+rWP{TUMe8<6nR zP>Seh_K!I^{S>r|lVpS>w<rG_%+81T?_|!Y+&Sp>U;SH4nNI$9qWl`PVg0ii-|b&? z4A=83O6y+?TKF#itnf}W&~<fcz!npyhNk=IkPEM0dHuPX_3QV{n|tmzam_FHOP4lW z*VZe10Qu&7-@4anvcL9s4I2=0ximic9py8%{6^$o`PIQ+ooW2#SK(jHF(Zrm+Y$e@ z_oxul89=7LHUBNAvEZ$Ww=Ry7G;i1J-uv$U&)8PD)(mOGdpIQ6b#-Z=O9NdR=+Z!! z2D&uRrGYLDbZMYV16>;E(m<C6PSik*`Vh~_vW{&3yUgXCC=v6U>sk2A+6-$#^-)Z2 zZR*S8b^oVbJ2n9jhJpY}c5nbo$8Z!!$tVF^3rkB!a3t?eg?uo*;0X!g6PqImguItJ z4Rwi=HJ|mhQQuKNN(zR0n^Q2<(~^Rj9`H|(Hlo?MA_S6F8&?Kl<C?QJEPD)XTy0!i zgcI+nHm)|VIyJ9O4${VzVceKfL{tWrMH^Qo@Ca2KSG;F-To~17<BDs;KaFd(3OsZI HpGn{ZyGm?} literal 0 HcmV?d00001 diff --git a/Wawi Source/net_http_html.cpp b/Wawi Source/net_http_html.cpp new file mode 100644 index 0000000..820efa2 --- /dev/null +++ b/Wawi Source/net_http_html.cpp @@ -0,0 +1,280 @@ +/* --- NET_HTTP_HTML.CPP --- +/ +/ Written by Phil Himsworth, 2001-2002. +/ +/*/ + +#include <windows.h> +#include "types.h" +#include "main.h" +#include "resource.h" +#include "html.h" + + +// -------------------------------------------------------------------------------- +// *** SOCKET FUNCTIONS *** +// Low level socket writing function - strings +void prints(connection * conn, char * string) +{ + if (lstrlen(conn->output) + lstrlen(string) >= BUF_LEN) + flush(conn); + lstrcat(conn->output, string); +} + +// Write full buffer down the socket +void flush(connection * conn) +{ + int i = lstrlen(conn->output); + + if (send(conn->socket,conn->output,i,0) == SOCKET_ERROR) + { + //MessageBox(NULL,"Socket send() error!","gen_httpsrv error",MB_OK); + } + // Clear buffer - set first char to null character + conn->output[0] = 0; +} + +// Low level socket writing function - integers +void printsi(connection * conn,int number) +{ + char buffer[256]; + wsprintf(buffer,"%d",number); // Stick it in a string and call prints() + prints(conn,(char*)&buffer); +} + + +// Report an error to the client +void ReportError(connection * conn, char * errstring) +{ + OpenHTTPHeader(conn,"text/html",0,NULL); + OpenHtmlHeader(conn); + Style(conn); + CloseHeader(conn); + OpenPageBody(conn); + prints(conn,"<h3>Error!</h3>\n"); + prints(conn,errstring); + prints(conn,"<p>Back to <a href=\"\\\">main page</a></p>\n"); +} + + +// 400 Bad Request error +void Send400(connection * conn) +{ + prints(conn,"HTTP/1.0 400 Bad Request\nConnection: close\nContent-type: \"text/html\"\n\n"); + OpenHtmlHeader(conn); + Style(conn); + CloseHeader(conn); + OpenPageBody(conn); + prints(conn,"<h3>403 Bad Request</h3>\n"); + prints(conn,"<p>Your browser sent a request that this server could not understand.</p>\n"); + prints(conn,"<p>Invalid URI in request "); + prints(conn,conn->http.request); + prints(conn," "); + prints(conn,conn->http.file); + prints(conn," "); + prints(conn,conn->http.http_version); + prints(conn,"</p>\n<hr>\n<address>Wawi - Winamp HTTP Server</address>\n"); + CloseBody(conn); +}; + + + + + +// -------------------------------------------------------------------------------- +// Receives HTTP header and puts relevant information into http_request structure +bool GetRequest(connection * conn) +{ + char buffer[2048]; + int buffer_len; + int buffer_filled = 0; + int buffer_left; + bool complete = false; + + while(true) + { + // receive data + buffer_len = sizeof(buffer); + buffer_left = buffer_len-buffer_filled; + if (buffer_left <= 0) + buffer_len = 0; + else + buffer_len = recv(conn->socket,buffer + buffer_filled,buffer_len-buffer_filled,0); + + if (buffer_len != SOCKET_ERROR && buffer_len != 0) + { + buffer_filled += buffer_len; + // scan for end of header + for (int i=0;i<=buffer_filled;i++) + if (buffer[i]=='\n' && (buffer[i+1]=='\n' || buffer[i+2]=='\n')) + { + buffer[i+1] = 0; + //MessageBox(NULL,buffer,"gen_httpsrv debug", MB_OK); + char * chptr = (char*)&buffer; + + chptr = GetAString(chptr,conn->http.request); + chptr = GetAString(chptr,conn->http.file); + chptr = GetAString(chptr,conn->http.http_version); + + FindBasicAuth(conn,chptr); + + if (StrComp(conn->http.request,"HEAD")) + conn->http.reqID = RID_HEAD; + else + conn->http.reqID = RID_GET; + + if (!DecodeUrl(conn)) + return false; + //ListArgs(conn); + + return true; + } + } + else + { + return false; + } + } +} + + +// -------------------------------------------------------------------------------- +// Faffs around with the URL; splits 'page' from 'file' and places args in array +bool DecodeUrl(connection * conn) +{ + lstrcpy(conn->http.page,conn->http.file); // make page = file + conn->http.num_args = 0; + char * chptr = conn->http.file; + while (chptr[0] != '?') // skip past '?' url?name=value + { + if (chptr[0] == 0) + { + //MessageBox(NULL,"No args","decodeurl",MB_TOPMOST | MB_OK); + return true; // no '?', no arguments + } + chptr++; + } + + chptr[0] = 0; + lstrcpy(conn->http.page,conn->http.file); // alter page to remove arguments + chptr[0] = '?'; + + chptr++; + + //char temp[100]; + + int x=0; + while(x < 50) // max name/value pairs; usually stopped by return in loop + { + chptr = GetDelimitedString(chptr,'=',conn->http.pairs[x].name,30); + if (chptr == NULL) + { + //MessageBox(NULL,"no value","decodeurl",MB_TOPMOST | MB_OK); + return false; + } + chptr++; + chptr = GetDelimitedString(chptr,'&',conn->http.pairs[x].value,128); + if (chptr == NULL) + { + //MessageBox(NULL,"All args","decodeurl",MB_TOPMOST | MB_OK); + conn->http.num_args = x+1; + return true; + } + chptr++; + //wsprintf(temp,"name: %s\nvalue: %s",conn->http.pairs[x].name,conn->http.pairs[x].value); + //MessageBox(NULL,temp,"arg",MB_OK | MB_TOPMOST); + + x++; + } + return false; +} + +// -------------------------------------------------------------------------------- +// Test function to list the arguments retrieved from the requested URL +void ListArgs(connection * conn) +{ + int x=0; + char string[100]; + while (conn->http.pairs[x].name[0] != 0) + { + wsprintf(string,"Name: %s\nValue: %s",conn->http.pairs[x].name,conn->http.pairs[x].value); + MessageBox(NULL,string,"args",MB_OK | MB_TOPMOST); + x++; + } +} + +// -------------------------------------------------------------------------------- +// Return the value of an argument +bool GetArgValue(connection * conn, char * name, char * value, int len) +{ + int x=0; + while(conn->http.pairs[x].name[0] != 0) + { + if (StrComp(name,conn->http.pairs[x].name)) + { + //MessageBox(NULL,conn->http.pairs[x].value,"found",MB_OK | MB_TOPMOST); + lstrcpyn(value,conn->http.pairs[x].value,len); + for (int i=0;i<lstrlen(value);i++) + if (value[i]=='+') + value[i] = ' '; + return true; + } + x++; + } + return false; +} + +// -------------------------------------------------------------------------------- +// Removes '%20's and the like from a string +void Unescape_url(char * url) +{ + int x,y; + + for(x=0,y=0;url[y];++x,++y) { + if((url[x] = url[y]) == '%') + { + url[x] = x2c(&url[y+1]); + y+=2; + } + } + url[x] = 0; +} + +// -------------------------------------------------------------------------------- +// Returns a single character from a '%xx' string +char x2c(char *what) +{ + char digit; + + digit = (what[0] >= 'A' ? ((what[0] & 0xdf) - 'A')+10 : (what[0] - '0')); + digit *= 16; + digit += (what[1] >= 'A' ? ((what[1] & 0xdf) - 'A')+10 : (what[1] - '0')); + return(digit); +} + +// -------------------------------------------------------------------------------- +// Formats string into a URL properly +void Escape_url(char * url) +{ + char echars[] = " <>#%{}|\\^~[]`;/?:@=&"; // characters which have to be escaped + char eurl[255]; + int x=0,y=0; + while (url[x] != 0) + { + if (contains(echars,url[x])) + { + wsprintf(eurl+y,"%%%2x",url[x]); + y+=3; + x++; + } + else + { + eurl[y] = url[x]; + y++; + x++; + } + } + eurl[y] = 0; + lstrcpy(url,eurl); +} + diff --git a/Wawi Source/op_winamp.cpp b/Wawi Source/op_winamp.cpp new file mode 100644 index 0000000..aff98b2 --- /dev/null +++ b/Wawi Source/op_winamp.cpp @@ -0,0 +1,1027 @@ +/* --- OP_WINAMP.CPP --- +/ +/ Written by Phil Himsworth, 2001-2002. +/ +/*/ + +#include <windows.h> +#include "types.h" +#include "main.h" +#include "plugin.h" +#include "html.h" +#include "wamessage.h" +#include "op_winamp.h" +#include "resource.h" + +extern char mp3root[MAX_PATH], playlistdir[MAX_PATH], logfiledir[MAX_PATH], filetypes[255]; +extern int browse_enable, dl_wa_files, dl_other_files, show_other_files, frames, title_refresh, securepassword; + +extern char szAppVer[]; +extern char pagetitle[255]; + + +extern winampGeneralPurposePlugin plugin; + +// -------------------------------------------------------------------------------- +// Send an image from a resource +int CControl::Image(connection * conn,int type) +{ + //char * img = &conn->http.file[5]; + char img[30]; + GetArgValue(conn,"image",(char*)&img,30); + //MessageBox(NULL,img,"gen_httpSrv debug",MB_OK | MB_TOPMOST); + int imageid = atoi2(img); + + char dll[MAX_PATH]; + GetModuleFileName(plugin.hDllInstance,dll,sizeof(dll)); + HMODULE hm = GetModuleHandle(dll); + if (hm == NULL) + MessageBox(NULL,"gmh failed","gen_httpSrv debug",MB_OK); + + HRSRC resimage = FindResource(hm,MAKEINTRESOURCE(imageid),"Image"); + if (!resimage) // after an image that doesn't exist + { + + //MessageBox(NULL,"Bad image","gen_httpSrv debug",MB_OK); + return ST_CLOSE; + //closesocket(conn.socket); + //return true; + } + + HGLOBAL image = LoadResource(hm, resimage); + DWORD imglen = SizeofResource(hm, resimage); + + switch(type) + { + case IMG_GIF: + OpenHTTPHeader(conn,"image/gif",(int)imglen,NULL); + break; + case IMG_ICO: + OpenHTTPHeader(conn,"image/x-icon",(int)imglen,NULL); + break; + } + + if(conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + flush(conn); + send(conn->socket,(char*)image,imglen,0); + return ST_CLOSE; +} + +// -------------------------------------------------------------------------------- +// Sends top frame with buttons and the like +int CControl::TopFrame(connection * conn) +{ + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + OpenHtmlHeader(conn); + CloseHeader(conn); + OpenHeaderBody(conn); + LinkTable(conn); + + return ST_CLOSEBODY; +} + +// -------------------------------------------------------------------------------- +// Tiny title +int CControl::SmallTitle(connection * conn) +{ + conn->log = false; + OpenHTTPHeader(conn,"text/plain",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + SongInfo(conn); + prints(conn,"\n\n"); + + return ST_CLOSE; +} + +// -------------------------------------------------------------------------------- +// Sends full title information +int CControl::Title(connection * conn) +{ + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + else + { + OpenHtmlHeader(conn); + prints(conn,"<meta http-equiv=\"Refresh\" content=\""); + printsi(conn,title_refresh); + prints(conn,"; url=/title\">\n"); + Style(conn); + CloseHeader(conn); + OpenPageBody(conn); + FullSongInfo(conn); + + prints(conn,"\n"); + + return ST_CLOSEBODY; + } +} + +// -------------------------------------------------------------------------------- +// Shuts down winamp and the computer, in theory. Doesn't, though... +int CControl::Shutdown(connection * conn) +{ + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + OpenHtmlHeader(conn); + Style(conn); + CloseHeader(conn); + OpenPageBody(conn); + prints(conn,"<p>Turning off...</p>\n"); + + ExitWindows(0,0); + PostMessage(WAwnd(),WM_CLOSE,0,0); + + return ST_CLOSEBODY; +} + + +// -------------------------------------------------------------------------------- +// Clears playlist +int CControl::Clear(connection * conn) +{ + SendMessage(WAwnd(),WM_USER,0,WAU_CLEARPLIST); + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + OpenHtmlHeader(conn); + Style(conn); + RefreshHeader(conn,"/list"); + CloseHeader(conn); + OpenPageBody(conn); + prints(conn,"<p>Playlist cleared</p>\n"); + return ST_CLOSEBODY; +} + +// -------------------------------------------------------------------------------- +// Download a song +int CControl::Download(connection * conn) +{ + // exactly the same filename processing as Load, below. + char filepath[MAX_PATH]; + GetArgValue(conn,"file",filepath,MAX_PATH); + + //char *relfilepath = &conn->http.file[4]; + Unescape_url(filepath); + ReplaceSlashes(filepath); + + if (!GoodPath(filepath)) + ReportError(conn,"<p>The path requested is illegal.</p>\n<p>It cotains the <b>..</b> directory, which could present a security risk.</p>\n"); + else + { + bool wafile = IsWinampFile(GetFilename(filepath)); + + if ((wafile && dl_wa_files==0) || (!wafile && dl_other_files==0)) + ReportError(conn,"<p>Downloading files of this type is not permitted from this server.</p>"); + else + { + char fullfilepath[MAX_PATH]; + int pathlen = wsprintf(fullfilepath,"%s%s",mp3root,filepath); + Unescape_url((char*)&fullfilepath); + + /* + - Open a header with the right MIME type - needs file size + - Call TransmitFile() + - Rockin'. + */ + + HANDLE hFile = CreateFile( fullfilepath, + GENERIC_READ, + 0, + 0, + OPEN_EXISTING, + FILE_FLAG_SEQUENTIAL_SCAN, + 0); + if (hFile == INVALID_HANDLE_VALUE) + ReportError(conn,"<p>Couldn't open the file.</p>\n<p>Check the file exists and the name is correct.</p>\n"); + else + { + DWORD dwSize = GetFileSize(hFile, NULL); + OpenHTTPHeader(conn,"audio/mpeg",dwSize,GetFilename(fullfilepath)); + + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + flush(conn); + + TransmitFile(conn->socket, hFile, dwSize, 0, NULL, NULL, NULL); + CloseHandle(hFile); + return ST_CLOSE; + } + } + } + return ST_CLOSEBODY; +} + + + + +// -------------------------------------------------------------------------------- +// Load a song into the playlist +int CControl::Load(connection * conn) +{ + char relfilepath[MAX_PATH]; + char filepath[MAX_PATH]; + char shortcutfilepath[MAX_PATH]; + char playmode[10]; + GetArgValue(conn,"path",relfilepath,MAX_PATH); + Unescape_url(relfilepath); + + char refreshto[MAX_PATH]; + + if (relfilepath[0] == '\\' && relfilepath[1] != '\\') // single slash - local file (not UNC '\\' or HTTP 'http://...') + { + if (!GoodPath(relfilepath)) + { + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + OpenHtmlHeader(conn); + Style(conn); + CloseHeader(conn); + OpenPageBody(conn); + prints(conn,"<p><b>Error!</b> The path requested is illegal.</p>\n"); + prints(conn,"<p>&nbsp;</p>\n"); + return ST_CLOSEBODY; + } + else // Local path is okay + { + // need to check whether it's a url shortcut file + fileinfo file; + lstrcpy(file.name,relfilepath); + IsWinampFile(&file); + if (file.urlsct) // url shortcut; load contained address into 'filepath' + { + wsprintf(shortcutfilepath,"%s%s",mp3root,relfilepath); + GetPrivateProfileString("InternetShortcut","URL","",filepath,MAX_PATH,shortcutfilepath); + } + else // not a shortcut; just put the right path into filepath + { + wsprintf(filepath,"%s%s",mp3root,relfilepath); + } + + // refresh to "/browse?path=<directory containing file>" + char * p; + if (frames == 3) + wsprintf(refreshto,"/title"); + else + { + char refreshtemp[MAX_PATH]; + wsprintf(refreshtemp,"%s",relfilepath); + + p=refreshtemp+lstrlen(refreshtemp); + while (p >= refreshtemp && *p != '\\') p--; + if (++p >= refreshtemp) *p = 0; + Escape_url(refreshtemp); + wsprintf(refreshto,"/browse?path=%s",refreshtemp); + } + } + } + else // HTTP or UNC name; load directly + { + wsprintf(filepath,"%s",relfilepath); + } + + //MessageBox(NULL,filepath,"filepath",MB_OK | MB_TOPMOST); + + + int pathlen = lstrlen(filepath); + COPYDATASTRUCT cds; + cds.dwData = IPC_PLAYFILE; + cds.lpData = (void *)&filepath; + cds.cbData = pathlen+1; + SendMessage(WAwnd(),WM_COPYDATA,(WPARAM)NULL,(LPARAM)&cds); + + if (GetArgValue(conn,"play",playmode,10)) + { + if (StrComp(playmode,"now")) + { + int pl_len = SendMessage(WAwnd(),WM_USER,0,WAU_PLCOUNT); + SendMessage(WAwnd(),WM_USER,pl_len-1,WAU_SETPLPOS); + SendMessage(WAwnd(),WM_COMMAND,WAC_PLAY,0); + } + } + + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + GetArgValue(conn,"refresh",refreshto,10); // will overwrite existing value if + // the param exists + + OpenHtmlHeader(conn); + Style(conn); + + RefreshHeader(conn,refreshto); + CloseHeader(conn); + OpenPageBody(conn); + + prints(conn,"<p>Load file command sent: &nbsp; <b>"); + prints(conn,relfilepath); // actually relfilepath + prints(conn,"</b></p>\n"); + + return ST_CLOSEBODY; +} + +// -------------------------------------------------------------------------------- +// Send playlist page +int CControl::List(connection * conn) +{ + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + OpenHtmlHeader(conn); + Style(conn); + CloseHeader(conn); + OpenPageBody(conn); + + if (frames == 1) + LinkBar(conn); + + prints(conn,"<h3>\n<i>\n... Current Playlist ...\n</i></h3>\n"); + + prints(conn,"<form action=\"/list\" method=\"get\">\n"); + prints(conn,"Show only songs containing: <input type=\"text\" name=\"sub\" size=\"30\">\n"); + prints(conn,"<input type=\"submit\" value=\"Search\">\n"); + prints(conn,"</form>\n"); + + prints(conn,"<h6>\n<a href=\"#current\">Jump to Current Track</a>&nbsp;|&nbsp;"); + prints(conn,"<a href=\"/sort\">Sort Playlist</a>&nbsp;|&nbsp;<a href=\"/clear\">Clear Playlist</a>"); + prints(conn,"&nbsp;|&nbsp;<a href=\"save\">Save Playlist</a></h6>\n<ol>\n"); + + char song[255], lcasesong[255], substring[255]; + + bool restrict = GetArgValue(conn,"sub",substring,255); // search for substring? + if (restrict && substring[0] == 0) // if it's blank, show all + restrict = false; + + if (restrict) + { + Unescape_url(substring); + CharLower(substring); + prints(conn,"<p>Showing songs containing: "); + prints(conn,substring); + prints(conn,"</p>\n"); + } + + prints(conn,"<ol>\n"); + + int current = SendMessage(WAwnd(),WM_USER, 0, WAU_GETPLPOS); + char tbuffer[255]; + int t = SendMessage(WAwnd(),WM_USER, 0, WAU_PLCOUNT); + for (int count=0;count<t;count++) + { + lstrcpy(song,(char*)SendMessage(WAwnd(),WM_USER, count, WAU_GETTITLE)); + lstrcpy(lcasesong,song); + CharLower(lcasesong); + if (strstr2(lcasesong,substring) || restrict == false) + { + if (count == current) + prints(conn,"<b><a name=\"current\"></a>"); + + prints(conn,"<li>"); + + wsprintf(tbuffer,"/delete?track=%d",count+1); + ImgLink(conn,tbuffer,IDR_IMG_LIST_DEL,"Remove",0,0,T_MAIN); + wsprintf(tbuffer,"/play?track=%d",count+1); + ImgLink(conn,tbuffer,IDR_IMG_LIST_PLAY,"Play",0,0,T_BOTTOM); + + if (frames == 3) + wsprintf(tbuffer,"<a href=\"/play?track=%d\" target=\"bottom\">%s</a></li>\n", count+1, song); + else + wsprintf(tbuffer,"<a href=\"/play?track=%d\" >%s</a></li>\n", count+1, song); + + prints(conn,tbuffer); + if (count == current) + prints(conn,"</b>"); + } + + } + + prints(conn,"</ol>\n</p>"); + if (frames == 1) + LinkBar(conn); + prints(conn,"<p>&nbsp;</p>"); + + return ST_CLOSEBODY; +} + +// -------------------------------------------------------------------------------- +// Next track +int CControl::Next(connection * conn) +{ + SendMessage(WAwnd(),WM_COMMAND,WAC_NEXT,0); + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + OpenHtmlHeader(conn); + Style(conn); + char refreshto[MAX_PATH]; + if (!GetArgValue(conn,"refresh",refreshto,10)) + { + if (frames == 3) + wsprintf(refreshto,"/title"); + else + wsprintf(refreshto,"/main"); + } + + RefreshHeader(conn,refreshto); + CloseHeader(conn); + OpenPageBody(conn); + prints(conn,"<p>Next track command sent</p>\n"); + return ST_CLOSEBODY; +} + +// -------------------------------------------------------------------------------- +// Previous track +int CControl::Prev(connection * conn) +{ + SendMessage(WAwnd(),WM_COMMAND,WAC_PREV,0); + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + OpenHtmlHeader(conn); + char refreshto[MAX_PATH]; + if (!GetArgValue(conn,"refresh",refreshto,10)) + { + if (frames == 3) + wsprintf(refreshto,"/title"); + else + wsprintf(refreshto,"/main"); + } + RefreshHeader(conn,refreshto); + Style(conn); + CloseHeader(conn); + OpenPageBody(conn); + prints(conn,"<p>Previous track command sent</p>\n"); + return ST_CLOSEBODY; +} + +// -------------------------------------------------------------------------------- +// Start playback +int CControl::Play(connection * conn) +{ + char strtrack[10]; + if (GetArgValue(conn,"track",strtrack,10)) + { + int track = atoi2(strtrack) - 1; + if (track >= 0) + SendMessage(WAwnd(),WM_USER,track,WAU_SETPLPOS); + } + + SendMessage(WAwnd(),WM_COMMAND,WAC_PLAY,0); + + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + OpenHtmlHeader(conn); + Style(conn); + char refreshto[MAX_PATH]; + if (!GetArgValue(conn,"refresh",refreshto,10)) + { + if (frames == 3) + wsprintf(refreshto,"/title"); + else + wsprintf(refreshto,"/main"); + } + RefreshHeader(conn,refreshto); + CloseHeader(conn); + OpenPageBody(conn); + prints(conn,"<p>Play command sent</p>\n"); + + return ST_CLOSEBODY; +} + +// -------------------------------------------------------------------------------- +// Stop playback +int CControl::Stop(connection * conn) +{ + SendMessage(WAwnd(),WM_COMMAND,WAC_STOP,0); + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + OpenHtmlHeader(conn); + char refreshto[MAX_PATH]; + if (!GetArgValue(conn,"refresh",refreshto,10)) + { + if (frames == 3) + wsprintf(refreshto,"/title"); + else + wsprintf(refreshto,"/main"); + } + RefreshHeader(conn,refreshto); + Style(conn); + CloseHeader(conn); + OpenPageBody(conn); + prints(conn,"<p>Stop command sent</p>\n"); + return ST_CLOSEBODY; +} + +// -------------------------------------------------------------------------------- +// Stop with fadeout +int CControl::StopSlow(connection * conn) +{ + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + OpenHtmlHeader(conn); + char refreshto[MAX_PATH]; + if (!GetArgValue(conn,"refresh",refreshto,10)) + { + if (frames == 3) + wsprintf(refreshto,"/title"); + else + wsprintf(refreshto,"/main"); + } + RefreshHeader(conn,refreshto); + CloseHeader(conn); + OpenPageBody(conn); + prints(conn,"<p>Stopping..."); + flush(conn); + SendMessage(WAwnd(),WM_COMMAND,WAC_STOPFADE,0); + prints(conn," OK!</p>\n"); + + return ST_CLOSEBODY; +} + +// -------------------------------------------------------------------------------- +// Pause. Why am I even bothering to comment these?!? +int CControl::Pause(connection * conn) +{ + SendMessage(WAwnd(),WM_COMMAND,WAC_PAUSE,0); + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + OpenHtmlHeader(conn); + char refreshto[MAX_PATH]; + if (!GetArgValue(conn,"refresh",refreshto,10)) + { + if (frames == 3) + wsprintf(refreshto,"/title"); + else + wsprintf(refreshto,"/main"); + } + RefreshHeader(conn,refreshto); + Style(conn); + CloseHeader(conn); + OpenPageBody(conn); + prints(conn,"<p>Pause command sent</p>\n"); + return ST_CLOSEBODY; +} + +// -------------------------------------------------------------------------------- +// Change volume +int CControl::Volume(connection * conn) +{ + char strvol[20]; + GetArgValue(conn,"volume",strvol,20); + + int vol = atoi2(strvol); // Mwuahaha, die Clib + vol = (int)(vol * 25.5); + SendMessage(WAwnd(),WM_USER,vol,122); + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + OpenHtmlHeader(conn); + Style(conn); + char refreshto[MAX_PATH]; + if (!GetArgValue(conn,"refresh",refreshto,10)) + { + if (frames == 3) + wsprintf(refreshto,"/title"); + else + wsprintf(refreshto,"/main"); + } + RefreshHeader(conn,refreshto); + CloseHeader(conn); + OpenPageBody(conn); + + prints(conn,"<p>Change volume command sent</p>\n"); + return ST_CLOSEBODY; +} + +// -------------------------------------------------------------------------------- +// Change repeat / random modes +int CControl::Playmode(connection * conn) +{ + char repeat[10], random[10]; + if (!GetArgValue(conn,"repeat",repeat,10)) + wsprintf(repeat,"none"); + if (!GetArgValue(conn,"random",random,10)) + wsprintf(random,"none"); + + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + OpenHtmlHeader(conn); + Style(conn); + char refreshto[MAX_PATH]; + if (!GetArgValue(conn,"refresh",refreshto,10)) + wsprintf(refreshto,"/main"); + RefreshHeader(conn,refreshto); + CloseHeader(conn); + OpenPageBody(conn); + + if (StrComp(repeat,"on")) + { + SendMessage(WAwnd(),WM_USER,1,WAU_SETREPEAT); + prints(conn,"<p>Repeat set to <b>ON</b></p>"); + } + if (StrComp(repeat,"off")) + { + SendMessage(WAwnd(),WM_USER,0,WAU_SETREPEAT); + prints(conn,"<p>Repeat set to <b>OFF</b></p>"); + } + if (StrComp(repeat,"toggle")) + { + SendMessage(WAwnd(),WM_COMMAND,WAC_REPEATT,0); + prints(conn,"<p>Repeat toggled</p>"); + } + + if (StrComp(random,"on")) + { + SendMessage(WAwnd(),WM_USER,1,WAU_SETRANDOM); + prints(conn,"<p>Random set to <b>ON</b></p>"); + } + if (StrComp(random,"off")) + { + SendMessage(WAwnd(),WM_USER,0,WAU_SETRANDOM); + prints(conn,"<p>Random set to <b>OFF</b></p>"); + } + if (StrComp(random,"toggle")) + { + SendMessage(WAwnd(),WM_COMMAND,WAC_RANDOMT,0); + prints(conn,"<p>Random toggled</p>"); + } + + return ST_CLOSEBODY; +} + +// -------------------------------------------------------------------------------- +// About box +int CControl::About(connection * conn) +{ + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + OpenHtmlHeader(conn); + Style(conn); + CloseHeader(conn); + prints(conn,"<body>\n"); + prints(conn,"<p align=center><b>Winamp Web Interface</b><br>\nVersion "); + prints(conn,szAppVer); + prints(conn,"</p>\n"); + prints(conn,"<p align=center>\n<i>\nPhil Himsworth 2002<br>\n"); + prints(conn,"<a href=mailto:contact@flippet.net>contact@flippet.net</a>&nbsp;&middot;&nbsp;<a href=http://www.flippet.net target=\"AnotherWindow\">www.flippet.net</a>\n</i>\n</p>\n\n"); + prints(conn,"</body>\n"); + flush(conn); + closesocket(conn->socket); + return ST_CLOSEBODY; +} + +// -------------------------------------------------------------------------------- +// Main window +int CControl::Main(connection * conn) +{ + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + OpenHtmlHeader(conn); + Style(conn); + CloseHeader(conn); + OpenPageBody(conn); + + prints(conn,"<h1 align=center>\n<i>\n"); + prints(conn,pagetitle); + prints(conn,"\n</i>\n\n</h1>\n"); + + prints(conn,"<h6 align=center>\n<a href=\"JavaScript:about()\">About Winamp Web Interface v."); + prints(conn,szAppVer); + prints(conn,"</a></h6>"); + + prints(conn,"<hr>\n"); + + prints(conn,"<h3>\n<i>\n... Winamp Status ...\n</i></h3>\n"); + prints(conn,"<p>\n"); + + FullSongInfo(conn); + prints(conn,"</p>\n"); + + int repeat = SendMessage(WAwnd(),WM_USER,0,WAU_GETREPEAT); + int random = SendMessage(WAwnd(),WM_USER,0,WAU_GETRANDOM); + + prints(conn,"<p>Repeat is "); + if (repeat == 1) + prints(conn,"<b>on</b> "); + if (repeat == 0) + prints(conn,"<b>off</b> "); + + prints(conn,"[ "); + Link(conn,"/playmode?repeat=on","on",T_NONE); + prints(conn," | "); + Link(conn,"/playmode?repeat=off","off",T_NONE); + prints(conn," | "); + Link(conn,"/playmode?repeat=toggle","toggle",T_NONE); + prints(conn," ]"); + + prints(conn,"<br>Random is "); + if (random == 1) + prints(conn,"<b>on</b> "); + if (random == 0) + prints(conn,"<b>off</b> "); + + prints(conn,"[ "); + Link(conn,"/playmode?random=on","on",T_NONE); + prints(conn," | "); + Link(conn,"/playmode?random=off","off",T_NONE); + prints(conn," | "); + Link(conn,"/playmode?random=toggle","toggle",T_NONE); + prints(conn," ]"); + + prints(conn,"</p>\n"); + + if (frames == 1) + LinkBar(conn); + + return ST_CLOSEBODY; +} + + +// -------------------------------------------------------------------------------- +// PDA mode - small +int CControl::pda(connection * conn) +{ + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + OpenHtmlHeader(conn); + Style(conn); + CloseHeader(conn); + prints(conn,"<body bgcolor=\"#000000\">\n"); + prints(conn,"<p align=\"center\">\n"); + + ImgLink(conn,"/prev?refresh=pda",IDR_IMG_PREV,"Previous Track",0,0,T_NONE); + + Img(conn,IDR_IMG_BLACK,"",2,30); + ImgLink(conn,"/play?refresh=pda",IDR_IMG_PLAY,"Play",0,0,T_NONE); + + Img(conn,IDR_IMG_BLACK,"",2,30); + ImgLink(conn,"/pause?refresh=pda",IDR_IMG_PAUSE,"Pause",0,0,T_NONE); + + Img(conn,IDR_IMG_BLACK,"",2,30); + ImgLink(conn,"/stop?refresh=pda",IDR_IMG_STOP,"Stop",0,0,T_NONE); + + Img(conn,IDR_IMG_BLACK,"",2,30); + ImgLink(conn,"/next?refresh=pda",IDR_IMG_NEXT,"Next Track",0,0,T_NONE); + + prints(conn,"</p>\n<p align=\"center\">\n"); + // Volume control links + ImgLink(conn,"/vol?volume=0&refresh=pda",IDR_VOL_00,"0/10",0,0,T_NONE); + ImgLink(conn,"/vol?volume=1&refresh=pda",IDR_VOL_01,"1/10",0,0,T_NONE); + ImgLink(conn,"/vol?volume=2&refresh=pda",IDR_VOL_02,"2/10",0,0,T_NONE); + ImgLink(conn,"/vol?volume=3&refresh=pda",IDR_VOL_03,"3/10",0,0,T_NONE); + ImgLink(conn,"/vol?volume=4&refresh=pda",IDR_VOL_04,"4/10",0,0,T_NONE); + ImgLink(conn,"/vol?volume=5&refresh=pda",IDR_VOL_05,"5/10",0,0,T_NONE); + ImgLink(conn,"/vol?volume=6&refresh=pda",IDR_VOL_06,"6/10",0,0,T_NONE); + ImgLink(conn,"/vol?volume=7&refresh=pda",IDR_VOL_07,"7/10",0,0,T_NONE); + ImgLink(conn,"/vol?volume=8&refresh=pda",IDR_VOL_08,"8/10",0,0,T_NONE); + ImgLink(conn,"/vol?volume=9&refresh=pda",IDR_VOL_09,"9/10",0,0,T_NONE); + ImgLink(conn,"/vol?volume=10&refresh=pda",IDR_VOL_10,"10/10",0,0,T_NONE); + + prints(conn,"\n</p>\n<p align=\"center\">\n"); + + int repeat = SendMessage(WAwnd(),WM_USER,0,WAU_GETREPEAT); + int random = SendMessage(WAwnd(),WM_USER,0,WAU_GETRANDOM); + + if (repeat) + ImgLink(conn,"/playmode?repeat=toggle&refresh=pda",IDR_IMG_RPT_ON,"Toggle Repeat",0,0,T_NONE); + else + ImgLink(conn,"/playmode?repeat=toggle&refresh=pda",IDR_IMG_RPT_OFF,"Toggle Repeat",0,0,T_NONE); + + if (random) + ImgLink(conn,"/playmode?random=toggle&refresh=pda",IDR_IMG_RND_ON,"Toggle Random",0,0,T_NONE); + else + ImgLink(conn,"/playmode?random=toggle&refresh=pda",IDR_IMG_RND_OFF,"Toggle Random",0,0,T_NONE); + + prints(conn,"</p>\n"); + + return ST_CLOSEBODY; +} + + + +// -------------------------------------------------------------------------------- +// Delete playlist entry. Uses DeletePlaylistEntry2() +int CControl::Delete(connection * conn) // using Playlist Window message +{ + char strtrack[20]; + GetArgValue(conn,"track",strtrack,20); + int track = atoi2(strtrack); + return DeletePlaylistEntry2(conn,track-1); +} + +// -------------------------------------------------------------------------------- +// Returns wawi.css +int CControl::UserStyle(connection * conn) +{ + OpenHTTPHeader(conn,"text/plain",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + char style_file[MAX_PATH], *p; + GetModuleFileName(plugin.hDllInstance,style_file,sizeof(style_file)); + p=style_file+lstrlen(style_file); + while (p >= style_file && *p != '\\') p--; + if (++p >= style_file) *p = 0; + lstrcat(style_file,"wawi.css"); + + HANDLE hFile = CreateFile( style_file, + GENERIC_READ, + FILE_SHARE_READ, + NULL, + OPEN_EXISTING, + FILE_FLAG_SEQUENTIAL_SCAN, + NULL); + + if (hFile == INVALID_HANDLE_VALUE) + { + prints(conn,"BODY\n{\nFONT-FAMILY: arial,sans-serif\n}\nA:link\n{\nCOLOR: blue;\nTEXT-DECORATION: none\n}\nA:visited\n{\nCOLOR: blue;\nTEXT-DECORATION: none\n}\nA:active\n{\nCOLOR: #ff9050;\nTEXT-DECORATION: none\n}\nA:hover\n{\nCOLOR: #e4a029;\nTEXT-DECORATION: none\n}\n\n"); + return ST_CLOSE; + } + + DWORD dwSize = GetFileSize(hFile, NULL); + + flush(conn); + + TransmitFile(conn->socket, hFile, dwSize, 0, NULL, NULL, NULL); + CloseHandle(hFile); + prints(conn,"\n\n"); + return ST_CLOSE; + +} + +// -------------------------------------------------------------------------------- +// Sorts playlist +int CControl::Sort(connection * conn) +{ + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + OpenHtmlHeader(conn); + char refreshto[MAX_PATH]; + if (!GetArgValue(conn,"refresh",refreshto,10)) + wsprintf(refreshto,"/list"); + RefreshHeader(conn,refreshto); + CloseHeader(conn); + OpenPageBody(conn); + prints(conn,"<p>Sorting..."); + flush(conn); + HWND playlistwnd = FindWindow("Winamp PE","Winamp Playlist Editor"); + if (playlistwnd == NULL) + prints(conn,"<b>Error</b>: Couldn't find Winamp Playlist window...</p>"); + else + { + SendMessage(playlistwnd,WM_COMMAND,PLC_SORTTITLE,0); + prints(conn," OK!</p>\n"); + } + + return ST_CLOSEBODY; + +} + +// -------------------------------------------------------------------------------- +// Saves playlist +int CControl::SavePlaylist(connection * conn) +{ + OpenHTTPHeader(conn,"text/html",0,NULL); + if (conn->http.reqID == RID_HEAD) + return ST_CLOSE; + + OpenHtmlHeader(conn); + Style(conn); + + char location[MAX_PATH]; + char nicelocation[MAX_PATH]; + char fulllocation[MAX_PATH]; + + // see if a location is specified; ask if not + if (!GetArgValue(conn,"location",location,MAX_PATH)) + { + // no location; pop up form + + CloseHeader(conn); + OpenPageBody(conn); + + prints(conn,"<h3><i>... Save Playlist ... </i></h3>\n"); + prints(conn,"<form action=\"/save\" method=\"get\">\n"); + prints(conn,"<p> Playlist Name: <input type=\"text\" name=\"location\" size=\"40\">\n"); + prints(conn,"<input type=\"submit\" value=\"Save\"></p>\n"); + prints(conn,"</form>\n"); + prints(conn,"<p>&nbsp;</p>\n"); + Link(conn,"/list","Return to Playlist",T_NONE); + } + else + { + char refreshto[MAX_PATH]; + if (!GetArgValue(conn,"refresh",refreshto,10)) + wsprintf(refreshto,"/list"); + + // location given; save it to mp3root \ playlist directory \ location + int dirlen = strlen(playlistdir); + if (dirlen == 0) + wsprintf(nicelocation,"%s.m3u",location); + else + wsprintf(nicelocation,"%s\\%s.m3u",playlistdir,location); + + wsprintf(fulllocation,"%s\\%s",mp3root,nicelocation); + + //MessageBox(NULL,fulllocation,nicelocation,MB_OK | MB_TOPMOST); + + SendMessage(WAwnd(),WM_USER,0,WAU_PLSAVE); + + // Find winamp.m3u; it's in the same dir as exe of current process. + DWORD wapid = GetWindowThreadProcessId(WAwnd(),NULL); + HMODULE hMod = (HMODULE)OpenProcess(PROCESS_ALL_ACCESS,false,wapid); + + char playlistfile[MAX_PATH], *p; + GetModuleFileName(hMod,playlistfile,sizeof(playlistfile)); + CloseHandle(hMod); + + // Make \path\winamp.exe into \path\winamp.m3u + p=playlistfile+lstrlen(playlistfile); + while (p >= playlistfile && *p != '\\') p--; + if (++p >= playlistfile) *p = 0; + lstrcat(playlistfile,"winamp.m3u"); + + if (CopyFile(playlistfile,fulllocation,true) == 0) + { + // function failed; try again + if (CopyFile(playlistfile,fulllocation,false) == 0) + { + // failed totally; tell them + + CloseHeader(conn); + OpenPageBody(conn); + + prints(conn,"<p><b>Error!</b></p><p>Couldn't save the playlist to <b>"); + prints(conn,nicelocation); + prints(conn,"</b></p>\n<p>Does the directory exist?</p>"); + Link(conn,"list","Back to Playlist",T_NONE); + } + else + { + // file overwritten + + RefreshHeader(conn,refreshto); + CloseHeader(conn); + OpenPageBody(conn); + + prints(conn,"<p>Playlist saved to <b>"); + prints(conn,nicelocation); + prints(conn,"<b>\n<p>Previous playlist overwritten.</p>\n"); + } + } + else + { + // file copied ok + + RefreshHeader(conn,refreshto); + CloseHeader(conn); + OpenPageBody(conn); + + prints(conn,"<p>Playlist saved to <b>"); + prints(conn,nicelocation); + prints(conn,"</b></p>\n"); + } + + } + + if (frames == 1) + LinkBar(conn); + + return ST_CLOSEBODY; + +} \ No newline at end of file diff --git a/Wawi Source/op_winamp.h b/Wawi Source/op_winamp.h new file mode 100644 index 0000000..5f00395 --- /dev/null +++ b/Wawi Source/op_winamp.h @@ -0,0 +1,35 @@ +// op_winamp.cpp + +class CControl +{ +public: + int Image(connection * conn,int type); + int TopFrame(connection * conn); + int SmallTitle(connection * conn); + int Title(connection * conn); + int Shutdown(connection * conn); + int Clear(connection * conn); + int Download(connection * conn); + int Load(connection * conn); + int List(connection * conn); + int Next(connection * conn); + int Prev(connection * conn); + int Play(connection * conn); + int Stop(connection * conn); + int StopSlow(connection * conn); + int Pause(connection * conn); + int Volume(connection * conn); + int Playmode(connection * conn); + int About(connection * conn); + int Main(connection * conn); + int WebAdmin(connection * conn); + int ApplyAdmin(connection * conn); + int pda(connection * conn); + int Delete(connection * conn); + int User(connection * conn); + int SetUser(connection * conn); + int UserStyle(connection * conn); + int Sort(connection * conn); + int SavePlaylist(connection * conn); + +}; diff --git a/Wawi Source/pimp.bat b/Wawi Source/pimp.bat new file mode 100644 index 0000000..022391f --- /dev/null +++ b/Wawi Source/pimp.bat @@ -0,0 +1,2 @@ +@echo off +makepimp gen_httpsrv.psc diff --git a/Wawi Source/playdir.gif b/Wawi Source/playdir.gif new file mode 100644 index 0000000000000000000000000000000000000000..be8c1844279c400e86c2b082bde3c96e348a3f78 GIT binary patch literal 904 zcmW+#Kd9Gr6g@8t3`C2-8iMX?auE76gi^zq)E+4AE>|KNY7kliF%AUnf`ca59U?_^ z(5KEfLc*~@qDZG)nuLOo2VKvn&-CMd?>+zS{T==2$f3ihU&br=^<Vt|2nZMi5JU(u zaE$~74iZQrg`CwWLV^Yb6j4GA8fc=09*n_=5oW@WU_gP1Km;QcF<~AusNh5*l97s> zkog%>Xrd6sC`C;)q8Y8|2`e4OD8@9fN((ZdX^iM$e{+fJi5w=FWQsYIJ-IAuSYVMQ z*08}QTkN6T8(_qlv~^EIiOE0)Gn6suJPb)CCli^>ROY0dlc|)NEMzfDS(A-yW-EKr ziCWYs#~EQMT7lXR9EY9TnEfo7OQ`!`8Y6nZeJ*LeQ9(tORHKHPYN<!wl8w4|ro1A% zbR(t$6|7Ljl=o)qp5|1dl9j5Q5=xH5s8fY1R;g;LQO#;qPkHkW&-^p(wL3YJV>-~m z4s}fX796J)aXQh-PIXQTEiRdwE_AU=UDJ(jcB^~Z*W`uR)66<0a2dinCf|)u#22vc zi(D?bmgIdndMCS%PF&Wt%-g3e?d<GWs5P11=mzz?Tm5VE*{%(k;voFie*(Kd!Myaw zv8QhyI`iVIdq2E(a`UHeUf8#F;lMkW?|*)N&x!9Z-u&+8uU>!cts7t7`t$zRo7<00 zJ-Gek$Ft{uzxL13?H`VR`|hWY|G4z`;}cijJNMt6-@Z8TOC9-a|M9=xzWU(m{*Uin O+PZuF;rkmK_~1FxgpYRs literal 0 HcmV?d00001 diff --git a/Wawi Source/playlist.gif b/Wawi Source/playlist.gif new file mode 100644 index 0000000000000000000000000000000000000000..a755577f33ea71835477fc975bd4b586ea7227a8 GIT binary patch literal 901 zcmZ?wbhEHb<YN$ExX#ZYAt7OCXc!a}l%1VjTwGjTUER{s($mv3Wy+K}bLK2vx^(N- zt;dcXyLa#2^XJdMfB*h}6pV(zFbV<1pDc_Fz^tId00f{s!N8HkpvWQPF+qWWfmPUv zV}k>OQ!5j*O~HZ#iY{%eVg?Qg8x`D`ImJ{oE*L&)Vp1^GGjLe&`1k}KDU*nTgoeY@ rrBW|#;bc&6o~kSVNG7uAp=Ym*ywDVnjV~^>d5OxkcudW5V6X-NaH9=n literal 0 HcmV?d00001 diff --git a/Wawi Source/plugin.h b/Wawi Source/plugin.h new file mode 100644 index 0000000..d37ca7c --- /dev/null +++ b/Wawi Source/plugin.h @@ -0,0 +1,14 @@ +typedef struct { + int version; + char *description; + int (*init)(); + void (*config)(); + void (*quit)(); + HWND hwndParent; + HINSTANCE hDllInstance; +} winampGeneralPurposePlugin; + +#define GPPHDR_VER 0x10 + +extern winampGeneralPurposePlugin *gen_plugins[256]; +typedef winampGeneralPurposePlugin * (*winampGeneralPurposePluginGetter)(); diff --git a/Wawi Source/resource.h b/Wawi Source/resource.h new file mode 100644 index 0000000..fb86592 --- /dev/null +++ b/Wawi Source/resource.h @@ -0,0 +1,118 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by Resource.rc +// +#define IDABOUT 3 +#define IDC_VIEWLOG 4 +#define IDUSERS 5 +#define IDD_DIALOG1 101 +#define IDR_DIRECTORY 107 +#define IDR_WAFILE 110 +#define IDR_PLAYLIST 111 +#define IDR_FILE 112 +#define IDR_DOWNLOAD 113 +#define IDR_IMG_ABOUT 114 +#define IDR_IMG_STOP 115 +#define IDR_IMG_MAIN 116 +#define IDR_IMG_NEXT 117 +#define IDR_IMG_PAUSE 118 +#define IDR_IMG_PLAY 119 +#define IDR_IMG_PLAYLIST 120 +#define IDR_IMG_PREV 121 +#define IDR_IMG_BROWSE 122 +#define IDR_IMG_BLACK 123 +#define IDR_VOL_09 124 +#define IDR_VOL_10 125 +#define IDR_VOL_02 126 +#define IDR_VOL_03 127 +#define IDR_VOL_04 128 +#define IDR_VOL_05 129 +#define IDR_VOL_06 130 +#define IDR_VOL_07 131 +#define IDR_VOL_08 132 +#define IDR_VOL_01 133 +#define IDR_VOL_00 134 +#define IDR_IMG_POPUP 135 +#define IDR_IMG_STOPSLOW 136 +#define IDR_PLAYDIR 137 +#define IDD_USERS 138 +#define IDR_ICO_WINAMP 141 +#define IDR_URLSCT 142 +#define IDR_IMG_ADMIN 143 +#define IDR_IMG_OK 144 +#define IDR_IMG_RPT_ON 145 +#define IDR_IMG_RND_ON 146 +#define IDR_IMG_RPT_OFF 147 +#define IDR_IMG_RND_OFF 148 +#define IDR_IMAGE1 150 +#define IDR_IMG_LIST_DEL 151 +#define IDR_IMG_LIST_PLAY 152 +#define IDD_SERVER 153 +#define IDD_WEBPAGE 154 +#define IDD_BROWSE 156 +#define IDD_ABOUT 157 +#define IDD_LOG 158 +#define IDI_USERS 159 +#define IDI_SERVER 160 +#define IDI_WEBPAGE 161 +#define IDI_BROWSE 162 +#define IDI_LOG 163 +#define IDB_FRAMES_TWO 164 +#define IDB_FRAMES_THREE 165 +#define IDB_FRAMES_ONE 166 +#define IDI_WINAMP 168 +#define IDB_TITLE 170 +#define IDC_PORT_EDIT 1000 +#define IDC_HIDE_ERROR 1001 +#define IDC_MP3_ROOT 1002 +#define IDC_PLAYLISTDIR 1003 +#define IDC_FILETYPES 1004 +#define IDC_FILETYPEHELP 1005 +#define IDC_ROOTDIRHELP 1006 +#define IDC_HIDEOTHERFILES 1007 +#define IDC_OTHER_FILES_SHOW 1007 +#define IDC_OTHER_FILES_DL 1008 +#define IDC_WA_FILES_DL 1009 +#define IDC_PLAYLISTDIRHELP 1010 +#define IDC_WA_FILES_SHOW 1011 +#define IDC_PAGETITLE 1012 +#define IDC_PAGETITLEHELP 1013 +#define IDC_TEXTMODE 1014 +#define IDC_PORT_EDIT2 1015 +#define IDC_USERNAME 1015 +#define IDC_SECUREPASSWORD 1015 +#define IDC_PASSWORD 1016 +#define IDC_LOGFILEPATH 1018 +#define IDC_REFRESH 1019 +#define IDC_USERS 1020 +#define IDC_BUTTON1 1023 +#define IDC_UPDATE 1023 +#define IDC_SECUREPASSWORDHELP 1023 +#define IDC_AUTH_SHUTDOWN 1024 +#define IDC_AUTH_SERVER 1024 +#define IDC_AUTH_CONTROL 1025 +#define IDC_AUTH_PLAYLIST 1026 +#define IDC_AUTH_DOWNLOAD 1027 +#define IDC_BROWSE 1028 +#define IDC_AUTH_BROWSE 1028 +#define IDC_DELETE 1029 +#define IDC_ADD 1030 +#define IDC_AUTH_CLEAR 1031 +#define IDC_PASS_DEBUG 1032 +#define IDC_NOFRAMES 1035 +#define IDC_TWOFRAMES 1036 +#define IDC_THREEFRAMES 1037 +#define IDC_FRAMEIMG 1040 +#define IDC_MAINIMAGE 1042 +#define IDC_ABOUT_TITLE 1043 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 171 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1044 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/Wawi Source/security.cpp b/Wawi Source/security.cpp new file mode 100644 index 0000000..27a0315 --- /dev/null +++ b/Wawi Source/security.cpp @@ -0,0 +1,312 @@ +/* --- SECURITY.CPP --- +/ +/ Written by Phil Himsworth, 2001-2002. +/ +/*/ + +#include <windows.h> +#include <wincrypt.h> +#include <mmsystem.h> + +#include "types.h" +#include "main.h" +#include "html.h" +#include "plugin.h" + +extern char password[], username[]; +extern int securepassword; + +extern winampGeneralPurposePlugin plugin; + + + +// Base64 character array +// 0 1 2 3 4 5 6 +// 01234567890123456789012345678901234567890123456789012345678901234 +char bchars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+*"; +char achars[256]; + +// -------------------------------------------------------------------------------- +// Calculates MD5 of a string +bool MD5(char * input, char * output, int output_len) +{ + //MessageBox(NULL,input,"MD5 input",MB_TOPMOST | MB_OK); + HCRYPTPROV hProv = 0; + HCRYPTHASH Hash; + + if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) + { + LPVOID lpMsgBuf; + FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + GetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language + (LPTSTR) &lpMsgBuf, + 0, + NULL + ); + // Process any inserts in lpMsgBuf. + // ... + // Display the string. + MessageBox( NULL, (LPCTSTR)lpMsgBuf, "MD5 AcquireContext Error", MB_OK | MB_ICONINFORMATION ); + // Free the buffer. + LocalFree( lpMsgBuf ); + + return false; + } + + CryptCreateHash(hProv,CALG_MD5, 0, 0, &Hash); + + int input_len = lstrlen(input); + + BYTE md5raw[2048]; + int md5raw_len = 2048; + CryptHashData(Hash,(unsigned char*)input,input_len, 0); // md5 of "<time>:<password>" + CryptGetHashParam(Hash, HP_HASHVAL, md5raw,(DWORD*)&md5raw_len,0); + + wsprintf(output,""); // Make output a terminated string + + char temp[4]; + //wsprintf(temp,"%d",md5raw_len); + //MessageBox(NULL,temp,"gen_httpSrv md5raw_len",MB_OK); + + for (int i=0;i<md5raw_len;i++) + { + wsprintf(temp,"%2.2x", md5raw[i]); + lstrcat(output,temp); + } + + //MessageBox(NULL,output,"gen_httpSrv debug MD5", MB_OK); + + + + + CryptReleaseContext(hProv,0); + return true; +} + + + + +// -------------------------------------------------------------------------------- +// Sends a 401 for Basic authentication +int SendBasic401(connection * conn, char * realm) +{ + prints(conn,"HTTP/1.0 401 Unauthorized\nWWW-Authenticate: Basic realm=\""); + prints(conn,realm); + prints(conn,"\"\n"); + prints(conn,"Content-Type: text/html\n\n<html>\n<head>\n<title>Login Failed</title>\n"); + Style(conn); + CloseHeader(conn); + OpenPageBody(conn); + prints(conn,"<h1>Login Failed</h1>\n<p><b>Winamp Web Interface could not log you in.</b></p>\n<p><a href=\"/main\">Back to main page</a></p>"); + CloseBody(conn); + conn->http.responsecode = 401; + return ST_CLOSE; +} + +// -------------------------------------------------------------------------------- +// Finds a substring in another string. Probably should be in strings.cpp... +char * FindSubString(char * buffer,char * target) +{ + //MessageBox(NULL,buffer,"gen_httpSrv FindSubString",MB_OK); + int len = lstrlen(buffer) - lstrlen(target); + for (int i=0;i<=len;i++) + { + if (StartString(target,buffer+i)) + return (char*)(buffer+i); + } + return NULL; +} + + + + +// -------------------------------------------------------------------------------- +// Finds auth headers in a request +void FindBasicAuth(connection * conn, char * buffer) +{ + //int ptr; + //MessageBox(NULL,buffer,"gen_httpSrv FindBasicAuth: buffer",MB_OK); + char * chptr = FindSubString(buffer,"Authorization:"); // Look for auth + if (!chptr) + { // Not found + chptr = FindSubString(buffer,"Authorisation:"); // Misspellings? + if (!chptr) // Still no; fail + { + //MessageBox(NULL,"No Auth","gen_httpSrv debug FindBasicAuth",MB_OK); + conn->http.auth = CheckCredentials(conn,"anon",""); + return; + } + } + + // Authorisation section found + //MessageBox(NULL,chptr,"gen_httpSrv debug",MB_OK); + + char temp[100]; + + + char * cl_user; + char * cl_pass; + + chptr = GetAString(chptr,(char*)&temp); // chptr now points at Authorisation, so get it + chptr = GetAString(chptr,(char*)&temp); // get auth mode - 'basic' + chptr = GetAString(chptr,(char*)&temp); // get user/pass string + + char userpass[100]; + FromBase64((char*)&temp,(char*)&userpass); + + int i=0; + while(userpass[i] != ':') + { + if (userpass[i] == 0) + { + conn->http.auth = CheckCredentials(conn,"anon",""); + return; + } + i++; + } + userpass[i] = 0; + cl_pass = &userpass[i+1]; + cl_user = (char*)&userpass; + + + //wsprintf(temp,"User: %s\nPassword: %s",cl_user,cl_pass); + //MessageBox(NULL,temp,"user/password",MB_TOPMOST | MB_OK); + //MessageBox(NULL,temp,"gen_httpSrv debug base64 from client",MB_OK); + + conn->http.auth = CheckCredentials(conn, cl_user, cl_pass); + + +} +// -------------------------------------------------------------------------------- +// Converts a string to Base64 +void ToBase64(char * instr, char * outstr) +{ + //MessageBox(NULL,instr,"instr",MB_OK); + + int i=0; + int o=0; + int j = lstrlen(instr); + + bool done = false; + + while(instr[i] != 0 && done == false) + { + outstr[o] = bchars[(instr[i] & 0xFC) / 4]; + outstr[o+1] = bchars[((instr[i] & 0x03) * 16) + ((instr[i+1] & 0xF0) / 16)]; + if (instr[i+1] == 0) + { + outstr[o+2] = '='; + outstr[o+3] = '='; + done = true; + } + else + { + outstr[o+2] = bchars[((instr[i+1] & 0x0F) * 4) + ((instr[i+2] & 0xC0) /64)]; + if (instr[i+2] == 0) + { + outstr[o+3] = '='; + done = true; + } + else + outstr[o+3] = bchars[(instr[i+2] & 0x3F)]; + } + + o += 4; + i += 3; + } + + outstr[o] = 0; +} + +// -------------------------------------------------------------------------------- +// Converts a Base64 string to plaintext +void FromBase64(char * instr,char * outstr) +{ + int i=0; + int o=0; + int j=lstrlen(instr); + + for (int n=0;n<j;n++) // reduce ascii codes to numbers + { + if (instr[n] != '=') + instr[n] = achars[instr[n]]; + else + instr[n] = (char)255; + } + + while(instr[i] != 0) + { + outstr[o] = ((instr[i] & 0x3F) * 4) + ((instr[i+1] & 0x30) / 16); + + if (instr[i+2] == (char)255) + outstr[o+1] = 0; + else + { + outstr[o+1] = ((instr[i+1] & 0x0F) * 16) + ((instr[i+2] & 0x3C) / 4); + + if (instr[i+3] == (char)255) + outstr[o+2] = 0; + else + outstr[o+2] = ((instr[i+2] & 0x03) * 64) + (instr[i+3] & 0x3F); + } + + i += 4; + o += 3; + } + outstr[o] = 0; +} + +// -------------------------------------------------------------------------------- +// Checks credentials with those in ini file +int CheckCredentials(connection * conn, char * user, char * pass) +{ + + char ini_file[MAX_PATH], *p; + GetModuleFileName(plugin.hDllInstance,ini_file,sizeof(ini_file)); + p=ini_file+lstrlen(ini_file); + while (p >= ini_file && *p != '\\') p--; + if (++p >= ini_file) *p = 0; + lstrcat(ini_file,"gen_httpsrv.ini"); + + if (StrComp(user,"anon")) + return GetUserAccess(ini_file,user); + + char password[40]; + + GetPrivateProfileString("Users",user,"",(char*)&password,40,ini_file); + + char md5pass[40]; + if (securepassword == 1) + MD5(pass,(char*)&md5pass,40); + else + ToBase64(pass,md5pass); + + //if (password[0] == 0) + // return AUTH_ANON; + + //char temp[150]; + //wsprintf(temp,"file: %s\nrecv: %s",password,md5pass); + //MessageBox(NULL,temp,"auth",MB_OK | MB_TOPMOST); + + if (StrComp(password,md5pass)) + { + wsprintf(conn->http.user,user); + return GetUserAccess(ini_file, user); + } + else + return AUTH_ANON; +} + +// -------------------------------------------------------------------------------- +// Gets access rights from the ini file +int GetUserAccess(char * ini_file,char * user) +{ + char useraccesskey[30]; + wsprintf(useraccesskey, "#%s_access", user); + return GetPrivateProfileInt("Users",useraccesskey,AUTH_ANON,ini_file); +} diff --git a/Wawi Source/server.ico b/Wawi Source/server.ico new file mode 100644 index 0000000000000000000000000000000000000000..cded08775bca94c779b4437ab09bacb90005e880 GIT binary patch literal 318 zcmZutF%H5o5OV}lv(br}k%#m_Y{__Avh_=0?<0^{85of07VNZTK-|Ul`A#`S0UWdM zdnnEhI7$h1PK3jr43x(I$N(OgEkb6AQVLar+74<}MKIM8Df}Wxc_|LnMh@$oFTPWZ zQH#ttPa%XD*E@;&ruPQ_nx<&<Uwy287+RnEq-}xJ=bR1o&UajC*Dz|~9|*S%JJvsV I($5|60csIV1poj5 literal 0 HcmV?d00001 diff --git a/Wawi Source/strings.cpp b/Wawi Source/strings.cpp new file mode 100644 index 0000000..310f823 --- /dev/null +++ b/Wawi Source/strings.cpp @@ -0,0 +1,265 @@ +/* --- STRINGS.CPP --- +/ +/ Written by Phil Himsworth, 2001-2002. +/ +/*/ + +#include <windows.h> +#include "wamessage.h" +#include "types.h" +#include "main.h" + +// This would be so much easier if Clib didn't have memory leaks within CreateThread... +// Oh well, here are the random string doodles + +// (And if I had found the Win32 string functions first...!) + + +// Returns a substring ending with the delimiter +char * GetDelimitedString(char * buffer, char delimiter, char * result, int result_len) +{ + int ptr = 0; + while(buffer[ptr] != delimiter && ptr < result_len) + { + result[ptr] = buffer[ptr]; + if (buffer[ptr] == 0) // Check for end of string + return NULL; + ptr++; + } + result[ptr] = 0; + + return buffer+ptr; +} + + +// -------------------------------------------------------------------------------- +// Gets a string not in quotes +bool GetUnquotedString(char * buffer, char * result, int result_len) +{ + int resptr = 0, ptr = 0; + while(buffer[ptr] != ' ' && buffer[ptr] != ',' && buffer[ptr] != 0 && ptr != result_len) // copy string + { + result[resptr] = buffer[ptr]; + ptr++; + resptr++; + } + result[resptr] = 0; + + return true; +} + +// -------------------------------------------------------------------------------- +// Gets a string within quotes +bool GetQuotedString(char * buffer, char * result, int result_len) +{ + int ptr = 0; + while(buffer[ptr] != '\"') // find first " + { + if (buffer[ptr] == 0) // end of string and no quote start found; fail + return false; + ptr++; + } + + // ptr points to first "; move on 1 to start of string + ptr++; + + int resptr = 0; + while(buffer[ptr] != '\"' && buffer[ptr] != 0 && ptr != result_len) // copy string until closing " + { // or end of buffer + result[resptr] = buffer[ptr]; + ptr++; + resptr++; + } + result[resptr] = 0; // make last char 0 + + return true; +} + + + +// -------------------------------------------------------------------------------- +// Checks if string2 begins with string1 +bool StartString(char* string1, char* string2) +{ + //char temp[2048]; + //wsprintf(temp,"1: %s\n2:%s",string1,string2); + //MessageBox(NULL,temp,"gen_httpSrv StartString",MB_OK); + int ptr = 0; + + while(ToLowerCase(string1[ptr]) == ToLowerCase(string2[ptr])) // Keep going until they're different + { + if (string1[ptr] == 0) // if string1 finishes, they're the same + return true; + ptr++; + } + + if (string1[ptr] == 0) // If they're different because string1 has ended, yes + return true; + else + return false; // If they're different and string1 has not ended, no +} + +// -------------------------------------------------------------------------------- +// Retrieves next token from buffer +char * GetAString(char* chptr, char* text) // Old GetAString - only accepts single words +{ + int bptr = 0; + int tptr = 0; + while (chptr[bptr] == ' ' || chptr[bptr] == '\n' || chptr[bptr] == '\r') // skip leading spaces and stuff + bptr++; + + while (chptr[bptr] != 0 && chptr[bptr] != ' ' && chptr[bptr] != '\n' && chptr[bptr] != '\r' && bptr < 255) // while current char is a letter + { + text[tptr] = chptr[bptr]; // add letter to text[] + bptr++; + tptr++; + } + text[tptr] = 0; + chptr = chptr + bptr; + return chptr; // return pointer to the end of this string +} + +// -------------------------------------------------------------------------------- +// Mangles the time into a displayable format +void PrintTime(connection * conn, int mins,int seconds) +{ + char tbuffer[20]; + if (seconds<10) // Avoids it printing eg. '4:2' when it should be '4:02' + wsprintf(tbuffer,"%d:0%d",mins,seconds); + else + wsprintf(tbuffer,"%d:%d",mins,seconds); + prints(conn,tbuffer); +} + + +void PrintTrackTime(connection * conn) +{ + int tracklen; + int trackpos = SendMessage(WAwnd(),WM_USER, 0, WAU_TRACKPOS) / 1000; + int mins = trackpos / 60; + int seconds = trackpos % 60; + prints(conn, " ("); + + PrintTime(conn,mins,seconds); + + tracklen = SendMessage(WAwnd(),WM_USER, 1, WAU_TRACKLENGTH); + mins = tracklen / 60; + seconds = tracklen % 60; + prints(conn, " / "); + PrintTime(conn,mins,seconds); + prints(conn, ")\n\r"); +} + +// -------------------------------------------------------------------------------- +// Convert a string to lower case +void ToLowerCase(char * string) +{ + int i=0; + while (string[i] != 0 && i < 255) + { + if (string[i] >= 'A' && string[i] <= 'Z') + string[i] += 32; + i++; + } +} + +// -------------------------------------------------------------------------------- +// Convert a char to lower case +char ToLowerCase(char c) +{ + if (c >= 'A' && c <= 'Z') + c += 32; + return c; +} + + +// -------------------------------------------------------------------------------- +// Blatantly better Strcmp using win32 lstrcmp +bool StrComp(char * string1, char * string2) +{ + if (lstrcmp(string1, string2) == 0) // Converts result from lstrcmp to a bool + return true; + else + return false; +} + +// -------------------------------------------------------------------------------- +// Converts '/' characters to '\'... it's Opera trying to be helpful, dammit! +void ReplaceSlashes(char * string) +{ + int ptr=0; + while (string[ptr]!=0) + { + if (string[ptr]=='/') + string[ptr] = '\\'; + ptr++; + } +} + +// -------------------------------------------------------------------------------- +// Retrieves a filename from a full path +char * GetFilename(char * path) +{ + char * filename; + + for (int i=0;path[i] != 0;i++) + if (path[i]=='\\') + filename = path+i; + + return filename+1; // ignore leading slash +} + +// -------------------------------------------------------------------------------- +// Non-clib version of atoi +int atoi2(const char *str ) +{ + int val = 0, mlt = 1; + char *p; + p = (char *) (str + lstrlen( str ) - 1); + for( ; p >= str; --p, mlt *= 10 ) { + val += (mlt * ((int)*p - '0')); + } + return val; +} + +// -------------------------------------------------------------------------------- +// Checks if string contains a character +bool contains(char * echars,char ch) +{ + int x=0; + while(echars[x] != 0) + { + if (echars[x] == ch) + return true; + x++; + } + return false; +} + +// -------------------------------------------------------------------------------- +// Finds substring +char * strstr2(char *string, char *substring) +{ + char *a, *b; + + b = substring; + if (*b == 0) { + return string; + } + for ( ; *string != 0; string += 1) { + if (*string != *b) { + continue; + } + a = string; + while (1) { + if (*b == 0) { + return string; + } + if (*a++ != *b++) { + break; + } + } + b = substring; + } + return NULL; +} diff --git a/Wawi Source/types.h b/Wawi Source/types.h new file mode 100644 index 0000000..0308673 --- /dev/null +++ b/Wawi Source/types.h @@ -0,0 +1,108 @@ +// Global types and definitions + +// list to store user information from ini file +struct user +{ + char name[20]; + user * next; +}; + + +// return values from DeletePlaylistEntry +#define DPE_OK 1 +#define DPE_NOREAD 2 +#define DPE_NOWRITE 3 + + +// playlist for deleting items +struct playlistitem +{ + int number; + char time[10]; + char name[MAX_PATH]; + char path[MAX_PATH]; + playlistitem * next; +}; + +struct fileinfo +{ + char path[MAX_PATH]; + char name[MAX_PATH]; + bool playlist; + bool urlsct; + fileinfo *next; + fileinfo *prev; +}; + +struct filesearch +{ + fileinfo *firstfile; + fileinfo *firstdir; + int dnodes; + int fnodes; +}; + +// Request IDs +#define RID_GET 101 +#define RID_HEAD 102 + +// Image types +#define IMG_GIF 301 +#define IMG_ICO 302 + +// Access level IDs. These get OR-ed together to come up with a single value +#define AUTH_ANON 0 +#define AUTH_BROWSE 1 +#define AUTH_DOWNLOAD 2 +#define AUTH_PLAYLIST 4 +#define AUTH_CLEAR 8 +#define AUTH_CONTROL 16 +#define AUTH_SERVER 32 + +// Target frames +#define T_NONE 601 +#define T_MAIN 602 +#define T_BOTTOM 603 +#define T_TOP 604 + +// holds information about 1 name/value pair ...?<name>=<value>&... +struct argument +{ + char name[30]; + char value[128]; +}; + +// Main connection information structure +struct http_request +{ + char user[20]; // logged on user (or 'anon') + char request[10]; // 'GET', 'HEAD' etc + int reqID; // integer representing the above + char file[512]; // full requested url + char page[MAX_PATH]; // just the page, without arguments + char http_version[10]; // HTTP Version; eg. "HTTP/1.0" + int responsecode; // HTTP response; 200, 400, 401 etc + char realm[50]; // authentication realm + int auth; // access level + argument pairs[50]; // name/value pairs for arguments + int num_args; // number of arguments +}; + + +#define BUF_LEN 10000 + +// Return states +#define ST_NONE 200 +#define ST_CLOSE 201 +#define ST_CLOSEBODY 202 + +struct connection +{ + char output[BUF_LEN]; + http_request http; + SOCKET socket; + sockaddr_in remote_host; + int state; + bool log; + +}; \ No newline at end of file diff --git a/Wawi Source/users.ico b/Wawi Source/users.ico new file mode 100644 index 0000000000000000000000000000000000000000..202165d4cf2c2e43c366e2d9ead9a7646c7e141f GIT binary patch literal 318 zcmZurF%APE3^QsaHel-7j(uK#09(g?iLKwr3r@GujoQEsl}cheaRLHxjFb{|?hd#} z2{|{y;Y<eV;D1yACQ6w?W{FxWRf9efy{jS^vP8!T8x#n(!HjOOJZHX5T`hc@M$C^f uIQpEI(cZ(4>%z0`^MTitAJ!M_#J>{ef&B`6B2_gZPqQkeKfoQ+4)qJ4`8v7) literal 0 HcmV?d00001 diff --git a/Wawi Source/wafile.gif b/Wawi Source/wafile.gif new file mode 100644 index 0000000000000000000000000000000000000000..3f8b324fcaf2d790ee24a007352d46a41a251acb GIT binary patch literal 878 zcmZ?wbhEHb<YN$ExX#P~1jmjY`~Uy{@87?H<R};ofe{q~ia%Kx85o!tbU--)lqVQC zycrldWIO~K8k!l{G-7rHC^)t8Fsqo%5Lo2Y$)X#V6A}2>wNZdw?}$W^gZm^N^*)x& gpd}tt<k$~<u?SA~?N(uaap$CP^1=B`%uEc{0IP}?G5`Po literal 0 HcmV?d00001 diff --git a/Wawi Source/wamessage.h b/Wawi Source/wamessage.h new file mode 100644 index 0000000..9e4c444 --- /dev/null +++ b/Wawi Source/wamessage.h @@ -0,0 +1,45 @@ +// defines for winamp API messages. + +// WM_COMMAND winamp play control messages + +#define WAC_PLAY 40045 +#define WAC_PAUSE 40046 +#define WAC_STOP 40047 +#define WAC_NEXT 40048 +#define WAC_PREV 40044 +#define WAC_EXIT 40001 +#define WAC_STOPFADE 40147 +#define WAC_STOPNEXT 40157 +// WM_COMMAND winamp misc control messages + +#define WAC_HIDEMAIN 40258 +#define WAC_HIDEPLAY 40040 +#define WAC_HIDEEQ 40036 +#define WAC_RANDOMT 40023 +#define WAC_REPEATT 40022 +#define WAC_QUIT 40001 + +// WM_USER winamp messages + +#define WAU_CLEARPLIST 101 +#define WAU_STATUS 104 +#define WAU_SETPLPOS 121 +#define WAU_GETPLPOS 125 +#define WAU_TRACKLENGTH 105 // data = 1 +#define WAU_TRACKPOS 105 // data = 0 +#define WAU_GETRANDOM 250 +#define WAU_GETREPEAT 251 +#define WAU_SETRANDOM 252 +#define WAU_SETREPEAT 253 +#define WAU_GETTITLE 212 +#define WAU_PLCOUNT 124 +#define WAU_PLSAVE 120 +#define WAU_UPDTITLE 243 + +// COPYDATASTRUCT winamp messages + +#define IPC_PLAYFILE 100 + +// Playlist window WM_COMMAND messages + +#define PLC_SORTTITLE 40209 diff --git a/Wawi Source/wawi_large.gif b/Wawi Source/wawi_large.gif new file mode 100644 index 0000000000000000000000000000000000000000..1fde29234e42e6acbcd37637e83a30823068bea1 GIT binary patch literal 5417 zcmX9=2UHVT+a7h5BBHA<AOfPS3JUtIx)7R<x=Iu5(nYZV0clDL0fr(q^b#N-Lkl%@ z5?XNRp^Kt)b^w)LT!laa<e!}X&Y3xxd*1hXpK|A%XzAR<sXjfl<HL>tHn6<B3}DNT z#{&TV4e+olAP@+^eqztS03MGA0ssU6FaRI`fC2yj0w4%LAOM2^0s<%q{C@=q0T2Yh z5P(1c3IRNb-vhz`1OqS(ATWT!01xJ)fCvB~0E_?#0-y-MLjVjHL;(l|U=%=507U^F zw!;G;9su(Iga@E}ZXgJN5FZjm_~jrE0I@x6K_Cc&AOeCY2=cHh>>UCj2!tUJfj|@j zc@T)v#fl&pgkcbYK@<jgFo+4j+8_jk5fDK@6aje%h)KeLAQXgA5J5o{1$iiliNv5G z9tiV5ga@KL@c)g$hCzIZ5W=SqVUz)oKOW+b!hkUttO+Z@HuwvMAOwO?2;yOVFoaRW zwqO`SU<idF9t>gjVWhDl7=aK3LJ^3EK$xMJ46F@CAq0g`6yl)}W-%rV1A=)F!h=vA z#N(Te3BVdKzcF_)FER5lxA;0ST$ryC(}XF&_+sq%lVJWF3>CxRr-FHb&4ytFfe{o& zcrXToHDM*#27jRl!b1=&Im|DNAB?@D2#O*+l%FN$AjTNRDtHLWLwI~cF<MyiSk73g z*eSzu<GYEmhe3V=%J-5VHVE<czz`n-<*VVxk2#Jhgke4?3iEg{|3H8UUo(vG$Djx{ zgnvY^R4^A{ls_0nc{~&w#m@=iH}R>U*mD%2cC7HYD=?h(<jE67>{tQ(Zvhb826hQb zX_vqa{(^_jn6XOIn}QC=>85CxX0(J!T*QyEN;BIcWv_=y>6B%)$I9Q&H)}7;?j-;3 zSx1UaIklUDd;RV(Ql8VBrYXHsnsZ;iFY{)ksD6HhbrV(3B_<&M!SRP#Ld6Fw^Z$?^ zD7yUK@0-Hk&j*97_EEhgf1xIU4g#%zggM%Oq2qs)oiwFqJ`VQT^_xMmA<%;Ov&AlV zk)K#rg>x;5g+}(zLkJ4jmF<!)KI`>6uhpd}>1flQc=e)dA;I$NC#v!7J^PL-Eq=+n zYte6(#D3{pFHYaL{fGOj#&oC1%SDueoAq7cl0H4EY9q5p($Dsejjp<)yW_WQEu_>d zM#>GE4BPgtYPeRT?UpUxCaZ2g$EpXIOrDq3{CfQN2ZXYToW~D6`UKuR`Q9xKyKj!g zr+I%pIgsYd+faV|ba)?q!dKMf`!Ro!4n};iMA`SDXMh22(x>$^Lni3A8nPuxS{Nr6 zem5^iHY6}<aLS+i%{@KrV_#wl>AdpEiEzE5>4^y0cQemIKmTogGJ1OV!>KUs%XyZ; z@}W25!_`Dp27;d18^25d@v47PUWp35OjLe3^PQp*sC_!(-kjh|Pa(@A7Ez|#Lb(*B z8uy_jYdZCFyv=u(OuP%>q5PY@CnUd_gnHwxG7lxsKF{*P>&|B54OD0HwhIE?a&wEH zCeM<yz8flJglq}TQwvQ(@%gq(f;l;&fhPUrJCnxpLAb}(`KgGjf?Z{E4c<DWF2Cbs zg`Ui8Vd5Wa_=4PltEx{*i%&?{ri^}+OedXfOt5vU{CtL%<+{)GB)mP|u|#K`A{6;- zjH@g;tu2~9jj7#9dKKUAJ(8C)e&%e!>nUfAk<`&K^&j>Eo&x_lON(oj#g&)VIg^x{ zHp|{#%u!sz%bR4KZ{Iy9mENmq_~(WC>#@|5jtf52j9!Mcm*J;dBZ{NU;Jcc%j{=s= z3b#$Qt&;v51nHtmYTsG9`Bn@~`TkR~l55AaY-yDjuTN_*jGj&G6WboNw`hs`*Hd2- zhf;(d<0gowi`FMeDog8AQCjCVzQ!5aZ+uI%D%$v-;<mIg4F{d$%w&=63A%z=MVz_3 zv?VoNK@nN*LdE_S&Z0zVk>^|`JA%7>xMf^@v2p)-^%d5kirS^t-p6%6+O__z`}t}A z%H~R6q&KoQ>h|7i^^2hob9pGp8`v?EQ+#;`8fj6>tsq-evwu0f-`-jbvtVw<rTM() zY;%us{!`Ih?~d?!QgCeRx5RotI11{%i2gWWeNkY$*N@$Va%8PFgoY#hYVN{piQvoo zc18s(e6rZV7P!_AM**koWQCvMz&~zAy;UOV>~v){$t<nB-M$nsA##`1FyZmPpbI+C zjs#ZoDM=vs`kzk^gbmiporwPPa@VA2D(i;4?q8uIS(98x_m(L6=rDZ^IZ5)&jXisu zLX{U}k96XGS9<9be(S-M<cK_?a`3N+n<;YAa(-<ZVjls*KXS*;3$_aEEDQCM`g&b7 zgmwK?Sy=e<ui`rLHz#l0i`kd{^<*lp<J7qe{z=XM%C+G%?-=|Om!R=gVPIOzpy*>P z?aj&K&x~33E;uEe9(^w1pu;qqbCwm>rd}W?-7;FcmynnB;?n1Vc1z{u#KA7AGNZlQ zp74``isaz*Vi*lq=NzX~OboXZ44A*?JG*cVG{$Ujw(%G3*xMD;<EO~VjvE&pUzLXs zjf&l&)Aqs9at2?-l9P*UXczbE4?9bB{LNDM^;G<Ye78(;A5EtsU51uB6&P5;_?Bn< zP1QK&LGrmMk9l3vCy^$#!{y<^;nc&F+XZ-h5&7CBDtp!{_u9*QK`+9<>o<(cM|a<E z849<b7Cu}VWAe`YulRhrjd;=>VaDP@$n7CjiSnI$j#VAjevbc$4>U-|m2bpdzH#zw zjqJq?S<P>S4JN`iOTXk_DfQ$#tbWdL{NuB$N#Q?kyXRX)34=L8!ns;BNxkD=DlHlw zKGLFydxriw;HO+kTg$V0=A^9DDf6Z1<-@{fV!!Two;-9deAl*O`EO^>-~YS4<jpmj z<I0>^Vmj?P;e@#L&;G==nEuMja6NmS3e&F_+>CF!6lzQjr?g43s`|aih#*&{_GJPC zKO|{at)@KjUw2Il^Fi#Mg3-qM`=#SIQZgi4O%@3WwCRV-Pt<M8jviks`*D2n<@`bO zcURYp|7be%Le6$%{?tH$Ww)-cuj`Y<Q@H$vctwx$Ih2C0w9J(L)Ne^KU-7nU+S}t8 zdRyaDQcR*+tp0%0j;_gr>W0lSujicH)XF2y^|wuq{bjIRa927F*QzS!{J}BsxwC>t z){TOPuHj;pY0j5A?$qXmyG%{xw|wsWz0zi={?wfda%~yHTd%gm`ib;+bPssv+YiaU zQdAFJx3psO>D1K}tG@63y+SSJYCCAX?2oZ|LF4#zef6H3>YTo)h>EP!`m?&GoR5h; z71U$<AOla%Cs?#HS4)5H9);7NYfzbQ*gf~Cmh-tJqO#CRf8Jz-^QEe%vdFD_{xO#` zfQZsdg7g<Gk8%fD2J|v=_rgnc?$Cz_dPR=@BHolcJlI30GrAY;J-H*OD5I)Pf61A` z9i1^?)C_blxz=*WRw5X6)B4MV5$^bU52K#lz2KXeEStUNmb1HO+3yeq&D?{_6N+&3 zS05eNC*X2b?A(FdTALFRy{j!sMUHnJG^S(++*`H}$pC=e=G5`q9<(cuf5b+befwWq zWv8C^k3hMU32F9vv(97Z*y+*fzkN1(pVcqG?9rLD`VH3a8Lz2&#MwPZ)~{Y$T+Tbh z9MTq0`)qM;^_`p7@!N*lgTA8CSr@;~ZPBYgRFAKgzSfw&VyHfnx$RQaw6!F!rCu^s z?^;`KKJUP;8QPt;ia2a7>uM3lS4Dp`?|--Q+Ku?>eyV%Jd$0e<Z5mUNN*l#i-Yb!( zH}YneHcCuoR?^(K-^0USce-gzrW$&ospD%+wlb@93(fg~h>gZ6nP25OUW+f%2njrM zwr3D$cE>U|>B{(W(G~BXkynUc_nM;p#Wlauw{JTY@0VuRs}SdW9k!m@`fQk_UFJMH zzdaZEp7SryYr}`OwZu)C{z}$d_~y->4D#9j#dxhhO<Wf6i5K_k%<+!a@&c-CcjBNK z0q-FOBy^RyWCcALfCk8J`xAYBTPIGFeRi{a8gqPiu%K)=&trmq5`#WUMsBAh{B!B< z7mWPHto?B_eyUaeyIKCK+WwcV{XmI;e~bcdx(8?{2Iy7=+!_opSP!@(@%A3>?E|B? zk8loB!OqtcJq>eT83+5By8D}JzcP{V`7a0m6c^a>D6m!BH#5i&FZim}E%1%DhoeML zk8;r2LA*_HP%Xn-iQxrV2M!Jdc@Mf{e-w!4<XxXKfJbh@MyG?tt9(cj#4LdjTb56( zwy&9>|GVIj_Exv?Ht#n^9#nzQB$n4A+w)absAh2JQ9+L~TxbsafTneDNtLsgTj-LZ ztN40YwS*mRz%z9E0K+|~VFn6K^o*;*dnS?^1zpzJK5IGtAKd-2C4xgFd}%>G1MZH# z);@>iLyELr{}qe~81zk7@$6+pOiP44u?~E0=x4=__|AUoXcSV(4qlT8-w+HSuY1f5 zM*e0TwZ|h$Feys7I!a_HN^~RYz>(;Ks?mpyqlv+!Ofs=5G3uy-OR#+8p`mD(+^}6X z(I-NpOHai}g~W`rY|m83*yFbS6=(71L!y##kyMp8I~1aZb0gF}+<AgAw{t@(41E&@ zNv-a2Q${fy?YGWk-$uhoE!9W?R;0^x>=C24w}rgQ1mjY12O^BZzRrZYtAwTE-rmmh zYZ;8$HAJ$QO+bud|B?^2t4?rHjp)e@%^wIgXb(|4?f1YY&PCgwtevP6lCXC$rqDXf zsXFdP2&q0eQ7|{rR4Bf8@Bk#_Ypn2ACC|t5NNiGdh`V^QB`z?vn(V3&J32#tCzLGb z@iu4HC(Sr~2uFFW>Q|eacvpgQekMXDm@KAErd5YOVo?rOg_jS;hq*%z?a8>j_>jDW z7f0entl#+M#ie<qrfeTcwF-&<C71#VIet0fqhFmGTb&Z2lk!D7KD^rficR#&k+lC* z(|#GJt$C!aC#7+!(>90Fwl~rMNqDCk{F@29hX4yE!@@PN$S^F*fe%QgA5=>}Y?3ZU zNS8=Xm#j&b8cvtNrxQGUF6NP(HzEiM;dz2?7pr0xRWi=yrJQ01Dw+`FYe-7Eua)z| zeQaF6YiCXhc`O8nd^F0`Vh6u5jC|w~C@k)BXxhziHaU1UdSWIzHz<SMM*OG4>43bG ziEeh?K(>W&2<}XFrgrwrj!eU3sv3b>hjYxxp@N)bd{vgN8?{3#$NWr&lP;wqILC&Q zb4`fiC7!cwAW02Wqk42uuUSzo=CZPFlB;L415Bun!qi7|J~8+_50l`KjsWAD%stjQ zH)>u7ak7$i!hB~v49Hn&q5d?^8|(Z$iduGdeoldc$Lc`l70Ij;LiRa))O$|);nRf- zvBG9TAuGACqo%NHxUh#)_(78PQH|DbLi<9X4JOluYiOgxw2wClcjl-9;*NnsSr5b= zCpHSuGex|Y4n=K6OtGTrWJjH#z|}d@Pc_?R$;>qq2kx2Tl07Bt<mfn+lHHxz6>G)o zbH##T`3r<M_9nUZTCbV2UNeM}-)&3(GRfM+m+YD^5wvxh6fQm3S;7`Bl{;IuS@TBD zbUW-xewk!gnblCy`PwphQ<9!=`I$~Xh4})d`J$aOWxp4cYmStvQ=k>Kic7T_TBa3} z^QEhtifeim7fdUcbc+?VOAWXs8~B8qdr2~;uaDJM>ToOXb{43Qls_6Noo=_EZ>!X; zE&Iooeovj@I`6b4%&^sC>}{iq>s1mc^#9iA%C;r8ou$W*mIs;A1IP^Tvkb?*m4Rog zEIiA7P3bE)t4^p@N7hy|g|lS272nnwk!Q;_h5f=QN%O+hcBUCir%HB?*q0s+xO1k4 zt6ZzjiYeM_-#SOD=hh-e>l)STnoa9kJ?mJMx{lhqu93PPZrz8Y%w!KQg=%W*_9I|7 zj34x54(Z`X!k8m_feAg^v9tIoy*FHw!V5uFX^-mjzA%@L;#cNvetI&?#ooh#@6V9y z>4CKl95;?BepMa6%M4+kMF`}25rN!%LC-e#oGa7ysNVZY)B0Uz4J&)=CrsZT>S7*D zVTy?~uFW?rQjmRn%M<kI+9TCvggiOL`om@o8{9@QjmE!4nl4E-9kFYYl4`;cT?#sD zJUtmVYBP(Io0JvbYm=JxY&NNMHLFRr7%Vi+Q0Q5qjWnwoty-@nPL3Y2L5I|=zuBx} z)_Sk7;kH?eKBbDJ*G%MA2k%8Li?rTRY<1miaWiY<97T?kYqBYg+fkimKk>Eol5II! zt>+b6?whrdNUU334Vrb$__`LcqZvwVRGNBl+?lpt>h<fM4br2mOHz%;7Mf4kbsV(w z-&VIH-a<l1_%}p+nn-7U$}5^(eX(L^^+Lzf%_c!J{{lt3X<PhJV&`IQQwgy?T@h(j zWcF-!MN8xwQDW+pySloV1BDHPX0}ATZqc^)d(~fcn>E%KHixCO7JuoOB08W8Rekgx zCaH7!R?F;Wr)&-qW>WUhgylZ+?gfE(Oyhk=3QL;Q8ZFh)xyei&W$hYkJH1)%ORRFz zV8!WW1?%>Ft7{0gYyC-Ti|lG*l6v;DW5Ws>ZHZ-Hhqqf&Qu<ym^gSE>c-*Tkg4pXv zDL<u8cPPvXB(={hur8;zU6KA2N&28L-S(F{<79W^E0H#HQs0lG{nFiiVTv7hm3l8R zTm2N9$p!r;-Tj*yO~oRgrIbEjrS)C7_4%8|$B=@`dn4h|>XjE6?LovY{VtY7U0>#C zd$v@gNNUILLcOl~oi?=2C;D9ng$7GEJEv}a@!J<YehXoxbd4x>c5DuA>>d1&GL+05 zN*Nn^w>1Py4`*l&XPFOEy@qpBhx3`kg=51-Tf-&NBW0Q+73L#!uaT<Mks9Vm-PlO| z)(9d!+Ne3&Y(CoRHOfjI?O={}jg9tfjed|G`zWh9)^9%c#cOOZb!?b9Haa#ozBPtQ Rk56ije>EQ;mOKEc{~yU0Vh{iT literal 0 HcmV?d00001 diff --git a/Wawi Source/wawi_small.gif b/Wawi Source/wawi_small.gif new file mode 100644 index 0000000000000000000000000000000000000000..005d599bee4ea62533634648a9947763c6671492 GIT binary patch literal 22973 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 literal 0 HcmV?d00001 diff --git a/Wawi Source/webpage.ico b/Wawi Source/webpage.ico new file mode 100644 index 0000000000000000000000000000000000000000..d76dcf0d4b28cd51d4f7155d04f2f6bdb5793d0e GIT binary patch literal 318 zcmZvXy$!-J6ofAV33sHTMo$zJ-hmV@GX*s}-~uTrBC%3rrSuStL4joM5~Tv$ci;Q5 z6C0>F>$--<xdIL%rOJ`2u%!dz?EfqRT!?W2ogv0?B-JSMLMe(UPL*WqaE}la4^!JR zaJQVMYa^Nu4ThZUl*3H((?aE*edU(C<%BNz#0p$yW=Ha4M&fx-W|1H6iuL>tTra#Y Yz-!OD?s)ypB0gA;{?XdkUY*g|FGsLN5&!@I literal 0 HcmV?d00001 diff --git a/Wawi Source/winamp.m3u b/Wawi Source/winamp.m3u new file mode 100644 index 0000000..fcdf93c --- /dev/null +++ b/Wawi Source/winamp.m3u @@ -0,0 +1,261 @@ +#EXTM3U +#EXTINF:239,Beautiful South - 36D +D:\Music\Albums\Beautiful South- Carry On Up The Charts\36D.mp3 +#EXTINF:177,Beautiful South - A Little Time +D:\Music\Albums\Beautiful South- Carry On Up The Charts\A Little Time.mp3 +#EXTINF:272,Beautiful South - Bell Bottomed Tear +D:\Music\Albums\Beautiful South- Carry On Up The Charts\Bell Bottomed Tear.mp3 +#EXTINF:213,Beautiful South - Dream A Little Dream Of Me +D:\Music\Albums\Beautiful South- Carry On Up The Charts\Dream A Little Dream Of Me.mp3 +#EXTINF:155,Beautiful South - Everybody's Talkin' +D:\Music\Albums\Beautiful South- Carry On Up The Charts\Everybody's Talkin'.mp3 +#EXTINF:226,Beautiful South - Good As Gold (Stupid As Mud) +D:\Music\Albums\Beautiful South- Carry On Up The Charts\Good As Gold (Stupid As Mud).mp3 +#EXTINF:243,Beautiful South - I'll Sail This Ship Alone +D:\Music\Albums\Beautiful South- Carry On Up The Charts\I'll Sail This Ship Alone.mp3 +#EXTINF:256,Beautiful South - Let Love Speak Up Itself +D:\Music\Albums\Beautiful South- Carry On Up The Charts\Let Love Speak Up Itself.mp3 +#EXTINF:170,Beautiful South - My Book +D:\Music\Albums\Beautiful South- Carry On Up The Charts\My Book.mp3 +#EXTINF:212,Beautiful South - Old Red Eyes Is Back +D:\Music\Albums\Beautiful South- Carry On Up The Charts\Old Red Eyes Is Back.mp3 +#EXTINF:212,Beautiful South - One Last Love Song +D:\Music\Albums\Beautiful South- Carry On Up The Charts\One Last Love Song.mp3 +#EXTINF:225,Beautiful South - Prettiest Eyes +D:\Music\Albums\Beautiful South- Carry On Up The Charts\Prettiest Eyes.mp3 +#EXTINF:242,Beautiful South - Song For Whoever +D:\Music\Albums\Beautiful South- Carry On Up The Charts\Song For Whoever.mp3 +#EXTINF:214,Beautiful South - We Are Each Other +D:\Music\Albums\Beautiful South- Carry On Up The Charts\We Are Each Other.mp3 +#EXTINF:171,Beautiful South - You Keep It All In +D:\Music\Albums\Beautiful South- Carry On Up The Charts\You Keep It All In.mp3 +#EXTINF:233,Dido - All You Want +D:\Music\Albums\Dido - No Angel\All You Want.mp3 +#EXTINF:272,Dido - Don't Think Of Me +D:\Music\Albums\Dido - No Angel\Don't Think Of Me.mp3 +#EXTINF:255,Dido - Here With Me +D:\Music\Albums\Dido - No Angel\Here With Me.mp3 +#EXTINF:278,Dido - Honestly OK +D:\Music\Albums\Dido - No Angel\Honestly OK.mp3 +#EXTINF:237,Dido - Hunter +D:\Music\Albums\Dido - No Angel\Hunter.mp3 +#EXTINF:235,Dido - I'm No Angel +D:\Music\Albums\Dido - No Angel\I'm No Angel.mp3 +#EXTINF:234,Dido - Isobel +D:\Music\Albums\Dido - No Angel\Isobel.mp3 +#EXTINF:189,Dido - My Life +D:\Music\Albums\Dido - No Angel\My Life.mp3 +#EXTINF:267,Dido - My Love's Gone +D:\Music\Albums\Dido - No Angel\My Love's Gone.mp3 +#EXTINF:292,Dido - Slide +D:\Music\Albums\Dido - No Angel\Slide.mp3 +#EXTINF:402,Dido - Take My Hand +D:\Music\Albums\Dido - No Angel\Take My Hand.mp3 +#EXTINF:218,Dido - Thank You +D:\Music\Albums\Dido - No Angel\Thank You.mp3 +#EXTINF:239,Elton John - Can You Feel The Love Tonight +D:\Music\Albums\Elton John\Can You Feel The Love Tonight.mp3 +#EXTINF:288,Elton John - Circle Of Life +D:\Music\Albums\Elton John\Circle Of Life.mp3 +#EXTINF:348,Elton John & George Michael - Don't Let The Sun Go Down On Me +D:\Music\Albums\Elton John\Don't Let The Sun Go Down On Me.mp3 +#EXTINF:281,Elton John - I Guess That's Why They Call This The Blues +D:\Music\Albums\Elton John\I Guess That's Why They Call It The Blues.mp3 +#EXTINF:308,Elton John - Sacrifice +D:\Music\Albums\Elton John\Sacrifice.mp3 +#EXTINF:227,Elton John - Sorry Seems To Be The Hardest Word +D:\Music\Albums\Elton John\Sorry Seems To Be The Hardest Word.mp3 +#EXTINF:351,Elton John - The One +D:\Music\Albums\Elton John\The One.mp3 +#EXTINF:258,Yesterday Went Too Soon +D:\Music\Albums\Feeder\Yesterday Went Too Soon.mp3 +#EXTINF:191,Buck Rogers +D:\Music\Albums\Feeder - Echo Park\Buck Rogers.mp3 +#EXTINF:222,Bug +D:\Music\Albums\Feeder - Echo Park\Bug.mp3 +#EXTINF:199,Choke +D:\Music\Albums\Feeder - Echo Park\Choke.mp3 +#EXTINF:259,Oxygen +D:\Music\Albums\Feeder - Echo Park\Oxygen.mp3 +#EXTINF:228,Piece By Piece +D:\Music\Albums\Feeder - Echo Park\Piece By Piece.mp3 +#EXTINF:325,Satellite News +D:\Music\Albums\Feeder - Echo Park\Satellite News.mp3 +#EXTINF:218,Seven Days In The Sun +D:\Music\Albums\Feeder - Echo Park\Seven Days In The Sun.mp3 +#EXTINF:191,Standing On The Edge +D:\Music\Albums\Feeder - Echo Park\Standing On The Edge.mp3 +#EXTINF:175,Tell All Your Friends +D:\Music\Albums\Feeder - Echo Park\Tell All Your Friends.mp3 +#EXTINF:270,Turn +D:\Music\Albums\Feeder - Echo Park\Turn.mp3 +#EXTINF:213,Under The Weather +D:\Music\Albums\Feeder - Echo Park\Under The Weather.mp3 +#EXTINF:230,We Can't Rewind +D:\Music\Albums\Feeder - Echo Park\We Can't Rewind.mp3 +#EXTINF:114,Feeder - 20th Century Trip +D:\Music\Albums\Feeder - Polythene\20th Century Trip.mp3 +#EXTINF:206,Feeder - Cement +D:\Music\Albums\Feeder - Polythene\Cement.mp3 +#EXTINF:206,Feeder - Change +D:\Music\Albums\Feeder - Polythene\Change.mp3 +#EXTINF:252,Feeder - Crash +D:\Music\Albums\Feeder - Polythene\Crash.mp3 +#EXTINF:321,Feeder - Descend +D:\Music\Albums\Feeder - Polythene\Descend.mp3 +#EXTINF:284,Feeder - Forgive +D:\Music\Albums\Feeder - Polythene\Forgive.mp3 +#EXTINF:264,Feeder - High +D:\Music\Albums\Feeder - Polythene\High.mp3 +#EXTINF:263,Feeder - My Perfect Day +D:\Music\Albums\Feeder - Polythene\My Perfect Day.mp3 +#EXTINF:207,Feeder - Polythene Girl +D:\Music\Albums\Feeder - Polythene\Polythene Girl.mp3 +#EXTINF:274,Feeder - Radiation +D:\Music\Albums\Feeder - Polythene\Radiation.mp3 +#EXTINF:206,Feeder - Stereo World +D:\Music\Albums\Feeder - Polythene\Stereo World.mp3 +#EXTINF:229,Feeder - Suffocate +D:\Music\Albums\Feeder - Polythene\Suffocate.mp3 +#EXTINF:229,Feeder - Tangerine +D:\Music\Albums\Feeder - Polythene\Tangerine.mp3 +#EXTINF:254,Ain't It The Life +D:\Music\Albums\Foo Fighters - There Is Nothing Left To Lose\Ain't It The Life.mp3 +#EXTINF:348,Aurora +D:\Music\Albums\Foo Fighters - There Is Nothing Left To Lose\Aurora.mp3 +#EXTINF:200,Breakout +D:\Music\Albums\Foo Fighters - There Is Nothing Left To Lose\Breakout.mp3 +#EXTINF:227,Generator +D:\Music\Albums\Foo Fighters - There Is Nothing Left To Lose\Generator.mp3 +#EXTINF:221,Gimme Stitches +D:\Music\Albums\Foo Fighters - There Is Nothing Left To Lose\Gimme Stitches.mp3 +#EXTINF:276,Headwires +D:\Music\Albums\Foo Fighters - There Is Nothing Left To Lose\Headwires.mp3 +#EXTINF:234,Learn To Fly +D:\Music\Albums\Foo Fighters - There Is Nothing Left To Lose\Learn To Fly.mp3 +#EXTINF:232,Live-In Skin +D:\Music\Albums\Foo Fighters - There Is Nothing Left To Lose\Live-In Skin.mp3 +#EXTINF:242,MIA!!s +D:\Music\Albums\Foo Fighters - There Is Nothing Left To Lose\MIA!!s.mp3 +#EXTINF:275,Next Year +D:\Music\Albums\Foo Fighters - There Is Nothing Left To Lose\Next Year.mp3 +#EXTINF:255,Stacked Actors +D:\Music\Albums\Foo Fighters - There Is Nothing Left To Lose\Stacked Actors.mp3 +#EXTINF:251,Bliss +D:\Music\Albums\Muse - Origin Of Symmetry\Bliss.mp3 +#EXTINF:438,Citizen Erased +D:\Music\Albums\Muse - Origin Of Symmetry\Citizen Erased.mp3 +#EXTINF:287,Darkshines +D:\Music\Albums\Muse - Origin Of Symmetry\Darkshines.mp3 +#EXTINF:199,Feeling Good +D:\Music\Albums\Muse - Origin Of Symmetry\Feeling Good.mp3 +#EXTINF:200,Hyper Music +D:\Music\Albums\Muse - Origin Of Symmetry\Hyper Music.mp3 +#EXTINF:277,Megalomania +D:\Music\Albums\Muse - Origin Of Symmetry\Megalomania.mp3 +#EXTINF:217,Micro Cuts +D:\Music\Albums\Muse - Origin Of Symmetry\Micro Cuts.mp3 +#EXTINF:362,New Born +D:\Music\Albums\Muse - Origin Of Symmetry\New Born.mp3 +#EXTINF:219,Muse - Plug In Baby +D:\Music\Albums\Muse - Origin Of Symmetry\Plug In Baby.mp3 +#EXTINF:259,Screenager +D:\Music\Albums\Muse - Origin Of Symmetry\Screenager.mp3 +#EXTINF:379,Space Dementia +D:\Music\Albums\Muse - Origin Of Symmetry\Space Dementia.mp3 +#EXTINF:196,Simon & Garfunkel - Baby Driver +D:\Music\Albums\Simon & Garfunkel - Bridge Over Troubled Water\Baby Driver.mp3 +#EXTINF:290,Simon & Garfunkel - Bridge Over Troubled Water +D:\Music\Albums\Simon & Garfunkel - Bridge Over Troubled Water\Bridge Over Troubled Water.mp3 +#EXTINF:175,Simon & Garfunkel - Bye Bye Love +D:\Music\Albums\Simon & Garfunkel - Bridge Over Troubled Water\Bye Bye Love.mp3 +#EXTINF:174,Simon & Garfunkel - Cecilia +D:\Music\Albums\Simon & Garfunkel - Bridge Over Troubled Water\Cecilia.mp3 +#EXTINF:186,Simon & Garfunkel - El Condor Pasa +D:\Music\Albums\Simon & Garfunkel - Bridge Over Troubled Water\El Condor Pasa.mp3 +#EXTINF:153,Simon & Garfunkel - Keep The Customer Satisfied +D:\Music\Albums\Simon & Garfunkel - Bridge Over Troubled Water\Keep The Customer Satisfied.mp3 +#EXTINF:221,Simon & Garfunkel - So Long, Frank Lloyd Wright +D:\Music\Albums\Simon & Garfunkel - Bridge Over Troubled Water\So Long, Frank Lloyd Wright.mp3 +#EXTINF:108,Simon & Garfunkel - Song For The Asking +D:\Music\Albums\Simon & Garfunkel - Bridge Over Troubled Water\Song For The Asking.mp3 +#EXTINF:308,Simon & Garfunkel - The Boxer +D:\Music\Albums\Simon & Garfunkel - Bridge Over Troubled Water\The Boxer.mp3 +#EXTINF:236,Simon & Garfunkel - The Only Living Boy In New York +D:\Music\Albums\Simon & Garfunkel - Bridge Over Troubled Water\The Only Living Boy In New York.mp3 +#EXTINF:164,Simon & Garfunkel - Why Don't You Write Me +D:\Music\Albums\Simon & Garfunkel - Bridge Over Troubled Water\Why Don't You Write Me.mp3 +#EXTINF:225,Stereophonics - A Minute Longer +D:\Music\Albums\Stereophonics- Performance And Cocktails\A Minute Longer.mp3 +#EXTINF:175,Stereophonics - Half Of The Lies You Tell Ain't True +D:\Music\Albums\Stereophonics- Performance And Cocktails\Half Of The Lies You Tell Ain't True.mp3 +#EXTINF:279,Stereophonics - Hurry Up And Wait +D:\Music\Albums\Stereophonics- Performance And Cocktails\Hurry Up And Wait.mp3 +#EXTINF:267,Stereophonics - I Stopped To Fill My Car Up +D:\Music\Albums\Stereophonics- Performance And Cocktails\I Stopped To Fill My Car Up.mp3 +#EXTINF:229,Stereophonics - I Wouldn't Believe You Radio +D:\Music\Albums\Stereophonics- Performance And Cocktails\I Wouldn't Believe You Radio.mp3 +#EXTINF:241,Stereophonics - Is Yesterday, Tomorrow, Today? +D:\Music\Albums\Stereophonics- Performance And Cocktails\Is Yesterday, Tomorrow, Today.mp3 +#EXTINF:252,Stereophonics - Just Looking +D:\Music\Albums\Stereophonics- Performance And Cocktails\Just Looking.mp3 +#EXTINF:213,Stereophonics - Pick A Part That's New +D:\Music\Albums\Stereophonics- Performance And Cocktails\Pick A Part That's New.mp3 +#EXTINF:270,Stereophonics - Plastic California +D:\Music\Albums\Stereophonics- Performance And Cocktails\Plastic California.mp3 +#EXTINF:237,Stereophonics - Roll Up And Shine +D:\Music\Albums\Stereophonics- Performance And Cocktails\Roll Up And Shine.mp3 +#EXTINF:235,Stereophonics - She Takes Her Clothes Off +D:\Music\Albums\Stereophonics- Performance And Cocktails\She Takes Her Clothes Off.mp3 +#EXTINF:244,Stereophonics - T-Shirt Sun Tan +D:\Music\Albums\Stereophonics- Performance And Cocktails\T-Shirt Sun Tan.mp3 +#EXTINF:174,Stereophonics - The Bartender And The Thief +D:\Music\Albums\Stereophonics- Performance And Cocktails\The Bartender And The Thief.mp3 +#EXTINF:124,The Beatles - Eleanor Rigby +D:\Music\Albums\The Beatles\Eleanor Rigby.mp3 +#EXTINF:185,The Beatles - Here Comes the Sun +D:\Music\Albums\The Beatles\Here Comes the Sun.mp3 +#EXTINF:426,The Beatles - Hey Jude +D:\Music\Albums\The Beatles\Hey Jude.mp3 +#EXTINF:104,The Beatles - I Will +D:\Music\Albums\The Beatles\I Will.mp3 +#EXTINF:229,The Beatles - Let It Be +D:\Music\Albums\The Beatles\Let It Be.mp3 +#EXTINF:213,The Beatles - She's Leaving Home +D:\Music\Albums\The Beatles\She's Leaving Home.mp3 +#EXTINF:216,The Beatles - The Long And Winding Road +D:\Music\Albums\The Beatles\The Long And Winding Road.mp3 +#EXTINF:125,The Beatles - Yesterday +D:\Music\Albums\The Beatles\Yesterday.mp3 +#EXTINF:181,The Levellers - Belaruse +D:\Music\Albums\The Levellers - One Way Of Life\Belaruse.mp3 +#EXTINF:196,The Levellers - Bozos +D:\Music\Albums\The Levellers - One Way Of Life\Bozos.mp3 +#EXTINF:284,The Levellers - Carry Me +D:\Music\Albums\The Levellers - One Way Of Life\Carry Me.mp3 +#EXTINF:245,The Levellers - Celebrate +D:\Music\Albums\The Levellers - One Way Of Life\Celebrate.mp3 +#EXTINF:215,The Levellers - Dog Train +D:\Music\Albums\The Levellers - One Way Of Life\Dog Train.mp3 +#EXTINF:196,The Levellers - Fantasy +D:\Music\Albums\The Levellers - One Way Of Life\Fantasy.mp3 +#EXTINF:209,The Levellers - Far From Home +D:\Music\Albums\The Levellers - One Way Of Life\Far From Home.mp3 +#EXTINF:187,The Levellers - Fifteen Years +D:\Music\Albums\The Levellers - One Way Of Life\Fifteen Years.mp3 +#EXTINF:265,The Levellers - Hope Street +D:\Music\Albums\The Levellers - One Way Of Life\Hope Street.mp3 +#EXTINF:231,The Levellers - Julie +D:\Music\Albums\The Levellers - One Way Of Life\Julie.mp3 +#EXTINF:168,The Levellers - Just The One +D:\Music\Albums\The Levellers - One Way Of Life\Just The One.mp3 +#EXTINF:204,The Levellers - One Way +D:\Music\Albums\The Levellers - One Way Of Life\One Way.mp3 +#EXTINF:242,The Levellers - Shadow On The Sun +D:\Music\Albums\The Levellers - One Way Of Life\Shadow On The Sun.mp3 +#EXTINF:240,The Levellers - This Garden +D:\Music\Albums\The Levellers - One Way Of Life\This Garden.mp3 +#EXTINF:331,The Levellers - Too Real (12") +D:\Music\Albums\The Levellers - One Way Of Life\Too Real.mp3 +#EXTINF:241,The Levellers - What A Beautiful Day +D:\Music\Albums\The Levellers - One Way Of Life\What A Beautiful Day.mp3 diff --git a/Wawi_7-5-13.exe b/Wawi_7-5-13.exe new file mode 100644 index 0000000000000000000000000000000000000000..91939a7e950de4ee4d66dda16cb532704ce7673c GIT binary patch literal 112561 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 literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/Images/SECUR08.ICO b/gen_httpSrv_systray/Images/SECUR08.ICO new file mode 100644 index 0000000000000000000000000000000000000000..02cecfad8fcee91088b142f9b6a7b2f65d7b0481 GIT binary patch literal 1078 zcmbVLJ5Iwu5PeP}ZD9$yp~e-;2@qu@&R}s3cP=c%7M#Xu+(jY<<^~kFk3@sqfP@fD z$na*@iw&e9<IKL<dGpzL$3TP$(lmj}^8`30CW+tABj9KX%;`(13u=TJSHLoMzgUuF zto6W^Ce@;88WQ4u5K)WDM_sxcF2?-G%~b}Eal$=)N;sP6{ia99^^}92?z4><b6V*) zAL@p<{s2RL@6i5wmf?T~Wtorv!HQD%>4dmcp;5pT3^dBG2Hvr84(Ij@vumH`a!WSL z<FykPP#1Y<5VJe0Gv7=6r~Y^U&{9i;bm!yw19v!b21c^G6M4TB>6RaDn{`#UY_lw@ zs_K?-rKo$^bxZktJQmqZRo`x!XoE%6@E8_2C#b3o*)Ag4Hj$5gH6q)SQA5!=PpBz1 z%y~n5zgS<Cb4`oNM_pY0HRs{lIW%FO!u*82n=AHkQWOMZ3Vq|XyN5b<SMBL|Rr`xs s_cvljbK*n%_x8f~(E?QkWSPhI0@zvLfpG+!&46n)C~{AIqVhBS0(WctH2?qr literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/Images/Title.bmp b/gen_httpSrv_systray/Images/Title.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8dcdf9bfcb444095129ccf095fc8905f2fcec640 GIT binary patch literal 35710 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 F{|~rmoGt(W literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/Images/auth2.ico b/gen_httpSrv_systray/Images/auth2.ico new file mode 100644 index 0000000000000000000000000000000000000000..d35debcbdbdfb91e73555211d8979a0a91bf015e GIT binary patch literal 1078 zcmeH`y$!-J6ofA^5*@O{0JuUaBV~YOG;hE_G~R#}C@GN;4MGavvqOU-3K|Ny_};z0 zG}c+FR4W88!>N|GsQ0CADrx1UhF*XJth69Xk==PjhD>5CLL^m63AMqPkH*n5$Y(7J zfBf_f;DN8gd~VJU@agkJK97jUnc(RxMAFZE-Wgh{-vd)C-_>?a%-!^#+OjWtoE#=~ jS)F*shOQ&nQ%g%oGjsi-^pEh&&gD>e-AT8Nbnm4HBTdrr literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/Images/next.bmp b/gen_httpSrv_systray/Images/next.bmp new file mode 100644 index 0000000000000000000000000000000000000000..40cf9ea3fb67f228991d49a0c05c81541413bf4f GIT binary patch literal 114 zcmZ?rEn<KGJ0PV2#Jo_<$iN7eFaeX8#Q*>Q8UFv~Z~FgBu<3gRbJ}MMJ%*1Gj0_(* kl$k#;9bo>z#lrAW>M_%2>s;pV)d!gW|M<l8|F=0a0N5fNx&QzG literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/Images/next.ico b/gen_httpSrv_systray/Images/next.ico new file mode 100644 index 0000000000000000000000000000000000000000..032584561201409c78115f6744a23d6de6d11d88 GIT binary patch literal 1078 zcmb7DF>b>!3_QgJveo`UJQW#}HbBP~NER>26Y>>3O;5?#(PM@J>K!H7uInLXOp!;C zM=7QOhZWkkf#hoiywEmH!dnMCSHPCBmikF`c;ZT7?y`7*54=x?D_w*TXtfdTL5%XK z{3)bGLTB**;<P(v%y4G1Xeus*M$dTepm1rL*hZYrvVc>fF$}coQn-eFyQ7fxQ^N23 zR5RH(j(^}e-wfxo5B<ws@_EdZSZY1oA)jO!PcO=rL(+J1^G2w@GK<nB2_}DrW2mC^ z8~Bj+KrIbGHPx~BF>hKczwnkmrLX2(liyOyoO}Aq;yL5o;Y^$1O83DzuVdsPKx2+R z0ltq~Pha=6kku;^l0~srL|kl+E3ecQ9{aS6MD)2K&3&^w+}5WqRL6^V*n79%0o{pu c1YSkHr*^=#^X~lS-2tI`$8FtR@0-i{2Le}~`~Uy| literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/Images/pause.ICO b/gen_httpSrv_systray/Images/pause.ICO new file mode 100644 index 0000000000000000000000000000000000000000..53069b6efd45d8d19e4c9bcceea0a6c9c1644e9b GIT binary patch literal 1078 zcmb7DNp8b13>?J;daM0|`c&i>?bGx$JtfB+bL^pjIzx)G;-p2wgd&IANB|8a9I&nn zB<BP0LAxxDj|q62fFolo^^2PD!jr<<`;r0vk+U0~bWuv7RifG-waTONr;rW_o$lXa z&u$feV5jKQ8s#{yv30t@9<Y878H3|3@E`W4uy%OSSnr7;Z-q}_-so!H4(q~We#3hI z@IHfktm@XkmHWKjJ><RoCT}B#`i>hv8$x`7p<1RY{Q*9u1(<dU;-`f@`#FY#CwR5z z+WeIod!Fgvm&_e!hC6MBC*244e6IDvUK(>`p+Hy$aG4niJ2%X)#o}QjZgn<roD*|{ fM}!>u{SKU7d0&3tIThVp+*HZ6&8fCJ^?2_u45Vlo literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/Images/pause.bmp b/gen_httpSrv_systray/Images/pause.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5cc1b854322cb6a8240e70d966b030d84a4882e1 GIT binary patch literal 114 zcmZ?rEn<KGJ0PV2#Jo_<$iN7eFaeX8#Q*>Q8UFv^Yx@6#zv)K@bJ~wCJ%%40j6kf+ h{G;mt5VJ7+=z7fbqdS-RNB05d|36%q|Njwe0st-1AG-hm literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/Images/play.bmp b/gen_httpSrv_systray/Images/play.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a1d48df8ae395d71f7c5bf43739ee1e76cd340b3 GIT binary patch literal 114 zcmZ?rEn<KGJ0PV2#Jo_<$iN7eFaeX8#Q*>Q8UFv^Yx?_xzv<5p28KTsS`2?I7#aRZ e05Jyx%O43QAYTtC4rKp0!2I{e2gd)u8CU?-pd2v( literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/Images/play.ico b/gen_httpSrv_systray/Images/play.ico new file mode 100644 index 0000000000000000000000000000000000000000..53069b6efd45d8d19e4c9bcceea0a6c9c1644e9b GIT binary patch literal 1078 zcmb7DNp8b13>?J;daM0|`c&i>?bGx$JtfB+bL^pjIzx)G;-p2wgd&IANB|8a9I&nn zB<BP0LAxxDj|q62fFolo^^2PD!jr<<`;r0vk+U0~bWuv7RifG-waTONr;rW_o$lXa z&u$feV5jKQ8s#{yv30t@9<Y878H3|3@E`W4uy%OSSnr7;Z-q}_-so!H4(q~We#3hI z@IHfktm@XkmHWKjJ><RoCT}B#`i>hv8$x`7p<1RY{Q*9u1(<dU;-`f@`#FY#CwR5z z+WeIod!Fgvm&_e!hC6MBC*244e6IDvUK(>`p+Hy$aG4niJ2%X)#o}QjZgn<roD*|{ fM}!>u{SKU7d0&3tIThVp+*HZ6&8fCJ^?2_u45Vlo literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/Images/prev.bmp b/gen_httpSrv_systray/Images/prev.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0c3bb476dfac330fc7eece00a797a984d4e6ee76 GIT binary patch literal 114 zcmZ?rEn<KGJ0PV2#Jo_<$iN7eFaeX8#Q*>Q8UFv^Yx@6>zv+JgbK1WoJ%&FHj0`^* hl$k#;9bo>!#KQ2$=`qv4<Xq<e#Rr(dYX9&z0RZbS9eMx& literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/Images/prev.ico b/gen_httpSrv_systray/Images/prev.ico new file mode 100644 index 0000000000000000000000000000000000000000..246278f92ec62879c1e6dffe4e9ec4464fac6387 GIT binary patch literal 1078 zcmb7CJ8r`;41JCZWUG9GdMa{@_Gmhqj*_vX#|{P9_ee>0q5w^4Q~W-XvI$H$VO<x9 zzD~e9<+6l*nSj?BxX`zfKgknbc#@d=m@>c@Ifvj$6{QqP1<YTVNh9--ONWR`*GD^| zd&ZsJOqJQeQQvDv{b&<OwH8IUD{`=VPT&Js=axYtMrc8uMmxfL{J-{J^@n)^plST0 zNXC4_{aRcJp62%nKtHL3yH>fe+qFF9m=H~OkF+4i*BQ%fM*aal#2b*r1(=Uqkxz>w zR(h-3`lzQ^d#=r2$!*Uw^~aRC<BV{pUGSv(<en!p4gm^RB)B+fOLW^N$v?13^FOgA yCP(V6Z2rh=xK_vih8D8*k;01KZ)VrCq0F#68OZ9#9$-ObblYQ!^Yh?(4(u;V{;_)i literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/Images/server.ico b/gen_httpSrv_systray/Images/server.ico new file mode 100644 index 0000000000000000000000000000000000000000..cded08775bca94c779b4437ab09bacb90005e880 GIT binary patch literal 318 zcmZutF%H5o5OV}lv(br}k%#m_Y{__Avh_=0?<0^{85of07VNZTK-|Ul`A#`S0UWdM zdnnEhI7$h1PK3jr43x(I$N(OgEkb6AQVLar+74<}MKIM8Df}Wxc_|LnMh@$oFTPWZ zQH#ttPa%XD*E@;&ruPQ_nx<&<Uwy287+RnEq-}xJ=bR1o&UajC*Dz|~9|*S%JJvsV I($5|60csIV1poj5 literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/Images/stop.bmp b/gen_httpSrv_systray/Images/stop.bmp new file mode 100644 index 0000000000000000000000000000000000000000..350aa3afd7e5473673a3ff457609ef3a8fc26de8 GIT binary patch literal 114 zcmZ?rEn<KGJ0PV2#Jo_<$iN7eFaeX8#Q*>Q8UFv^Yx@6>zv%}DbJ`CsJ%%3~j6kf+ d{DbQN5VJ7+;CjsTgFBb`2loMHu-ZTTO#rr!8;Ae^ literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/Images/stop.ico b/gen_httpSrv_systray/Images/stop.ico new file mode 100644 index 0000000000000000000000000000000000000000..1824785cc8ac5b118f34ff65b276aaadcd845ec3 GIT binary patch literal 1078 zcmdT@J8r`;41JCZWUGCHdJ1xj_Gmhqj*>B>#|#D7_bAg+93x1_DCXz!BhoYjbU0v| zM(A7*z=?7k3qE(iXAhidn@B&T4j<$^jNLy8;DeNkAg79)Go>8n56q;I_>)OYhsvry z;^M6l8(d+zZi8F66m3jR6N^fx_f*>Q)*9@o?}Y1+_up@seT*c&Ma6dkdh>8e`Xs8M z3}%ZXrFg|lgk#ISiGG1^(F_ct4D>B|@IP3aD?RRwI#E}9uFaoFvFC~U{z=?%dbrar z$f>@#=YtuW0EH{d3>?xh_$+O%JIq)g)N>hmanCy2sH1|cd;2oG9N8=X+o?0ry63FJ Ph>Gc(<yWk7m^=RgvSGrP literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/Images/winamp.ico b/gen_httpSrv_systray/Images/winamp.ico new file mode 100644 index 0000000000000000000000000000000000000000..3f19ac6ecc0422033a48426d58c88f54c17e80e4 GIT binary patch literal 318 zcmZvYy$ZrG6opTz(1JrU>8Ngwf`dYbzLMagbVwdR@L?QUxFC5HAEBEW#CUG2n>RT> z{ZdLOka1aSp|j3_nI@%VNoAPOfiU<#^8h!zAA`<{5CT&V(y)<|Hi}D;+IMn`qG!)r zxPeONl7gw6hSy4wodVZLdrc_fR^;Y-6NOWIJS*lNFtL(OKbm6GYMOME!wBXh@R)80 kO3L0HaH)Cq1!Z{Wg38(XAAX}<*@I_2GxGVh0^Vof11e@r^Z)<= literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/WawiTray Readme.txt b/gen_httpSrv_systray/WawiTray Readme.txt new file mode 100644 index 0000000..68607a1 --- /dev/null +++ b/gen_httpSrv_systray/WawiTray Readme.txt @@ -0,0 +1,64 @@ +A Really Quick Readme For The WawiTray Thingy +------------------------------------------------------- + +(Because I'm hungry and I want to go make dinner!) + + + +Based on a suggestion from Bill Kearney, it's a really teeny HTTP client which will send the right commands to the Winamp HTTP Server plugin to make it do stuff. This way you can control your winamp from another computer without using the big browser window if all you want it to do is control playback. + +Stick the right host (in IPv4 dotted format only, for example your local machine is always 127.0.0.1) and port number in (so it matches the value in the HTTP Server config window, 80 by default); stick a username and password in if required and click away. It'll either make winamp do stuff, or (hopefully) tell you why it can't. + +This is something I've only worked on for an hour or two, and as such probably has a few teething problems. If you do find anything, please drop me a mail (contact@flippet.net) to tell me what, and I'll see what I can do. Or feel free to send suggestions, jokes, cash et cetera... + + + + +Disclaimer +---------- + +While I've gone to every effort to make sure this doesn't cause harmful effects - I don't want to fry my own computer! - I cannot say for sure that it will not fry yours. I will not be responsible for any damage or loss of anything even slightly relating to this program. You use it ENTIRELY AT YOUR OWN RISK. Don't run to me if things break. I'll fix bits of the program if you spot bugs if I want to, but I'm under no obligation to do so at all. And don't you forget it. + +Besides that, I hope it's useful. Have fun! + + + + +Version History +--------------- + +2.1 +* Made it work with recent versions of Wawi +* Added a prettier config window +* A few little tweaks here and there... + +1.5 +* Tooltip of systray icon tells the song title. Set how often it updates in the Config window. + +1.4 +* Fancy-pants little icons for the play options in the menu + +1.3 +* The default action when left clicking on the icon can now be changed + +1.2 +* Added shortcuts to the Browse and Playlist pages + +1.1 +* Added a volume slider +* Added better error messages if it gets HTTP responses that it shouldn't + +1.0 +* Initial release + + + +Me +-- + +Phil Himsworth, UK + +web: http://www.flippet.org +email: contact@flippet.net + +September, 2002 \ No newline at end of file diff --git a/gen_httpSrv_systray/client.ini b/gen_httpSrv_systray/client.ini new file mode 100644 index 0000000..9d040ea --- /dev/null +++ b/gen_httpSrv_systray/client.ini @@ -0,0 +1,15 @@ +[Wawi Tray] +port=800 +default=105 +updatedelay=10 +auth=1 +host=10.2.169.200 +username=bob +password=password +[Winamp HTTP Server Client Applet] +port=800 +default=105 +updatedelay=10 +host=127.0.0.1 +username=anon +password= diff --git a/gen_httpSrv_systray/config.cpp b/gen_httpSrv_systray/config.cpp new file mode 100644 index 0000000..ab05ec3 --- /dev/null +++ b/gen_httpSrv_systray/config.cpp @@ -0,0 +1,453 @@ +#include <windows.h> +#include <prsht.h> +#include <mmsystem.h> +#include <commctrl.h> +#include "resource.h" +#include "main.h" + +extern HINSTANCE inst; +extern HWND hwnd; + +extern char host[255], username[20], password[20]; +extern int port, default_action, update_delay; +extern UINT timer_id; +extern bool use_auth; + +extern char szAppName[], AboutText[]; + +extern HWND ConfigWnd, VolumeWnd; + + +// -------------------------------------------------------------------------------- +// Entry point for new Config window, using Property Sheets instead of a single dialog. +void NewConfig() +{ + PROPSHEETPAGE psp[4]; + PROPSHEETHEADER psh; + + psp[0].dwSize = sizeof(PROPSHEETPAGE); + psp[0].dwFlags = PSP_USEICONID | PSP_USETITLE; + psp[0].hInstance = inst; + psp[0].pszTemplate = MAKEINTRESOURCE(IDD_ABOUT); + psp[0].pszIcon = MAKEINTRESOURCE(IDI_WINAMP); + psp[0].pfnDlgProc = ConfigAboutWndProc; + psp[0].pszTitle = "About"; + psp[0].lParam = 0; + psp[0].pfnCallback = NULL; + + psp[1].dwSize = sizeof(PROPSHEETPAGE); + psp[1].dwFlags = PSP_USEICONID | PSP_USETITLE; + psp[1].hInstance = inst; + psp[1].pszTemplate = MAKEINTRESOURCE(IDD_SERVER); + psp[1].pszIcon = MAKEINTRESOURCE(IDI_SERVER); + psp[1].pfnDlgProc = ConfigServerWndProc; + psp[1].pszTitle = "Server"; + psp[1].lParam = 0; + psp[1].pfnCallback = NULL; + + psp[2].dwSize = sizeof(PROPSHEETPAGE); + psp[2].dwFlags = PSP_USEICONID | PSP_USETITLE; + psp[2].hInstance = inst; + psp[2].pszTemplate = MAKEINTRESOURCE(IDD_SYSTRAY); + psp[2].pszIcon = MAKEINTRESOURCE(GetIconID()); + psp[2].pfnDlgProc = ConfigSystrayWndProc; + psp[2].pszTitle = "Tray Icon"; + psp[2].lParam = 0; + psp[2].pfnCallback = NULL; + + psp[3].dwSize = sizeof(PROPSHEETPAGE); + psp[3].dwFlags = PSP_USEICONID | PSP_USETITLE; + psp[3].hInstance = inst; + psp[3].pszTemplate = MAKEINTRESOURCE(IDD_AUTH); + psp[3].pszIcon = MAKEINTRESOURCE(IDI_AUTH2); + psp[3].pfnDlgProc = ConfigAuthWndProc; + psp[3].pszTitle = "Authentication"; + psp[3].lParam = 0; + psp[3].pfnCallback = NULL; + + + psh.dwSize = sizeof(PROPSHEETHEADER); + psh.dwFlags = PSH_USEICONID | PSH_PROPSHEETPAGE; + psh.hwndParent = hwnd; + psh.hInstance = inst; + psh.pszIcon = NULL; + psh.pszCaption = "WawiTray Config"; + psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE); + psh.nStartPage = 0; + psh.ppsp = (LPCPROPSHEETPAGE) &psp; + psh.pfnCallback = NULL; + + PropertySheet(&psh); + config_write(); + ConfigWnd = NULL; + return; +} + + +// -------------------------------------------------------------------------------- +// Server options window proc +BOOL CALLBACK ConfigServerWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + char TempString[10]; + int port_temp; + switch(uMsg) + { + case WM_INITDIALOG: + wsprintf(TempString,"%d",port); + SetDlgItemText(hwndDlg,IDC_HOST,host); + SetDlgItemText(hwndDlg,IDC_PORT,TempString); + break; + + + case WM_NOTIFY: + switch (((NMHDR FAR *) lParam)->code) + { + case PSN_APPLY: port_temp = GetDlgItemInt(hwndDlg,IDC_PORT,NULL,false); + if (port_temp > 0 && port_temp < 65536) + { + port = port_temp; + GetDlgItemText(hwndDlg,IDC_HOST,host,255); + } + else + { + MessageBox(hwndDlg,"Port must be from 1 to 65535!","Winamp Web Interface",MB_OK); + SetDlgItemInt(hwndDlg,IDC_PORT,port,false); + SetWindowLong(hwndDlg,DWL_MSGRESULT,true); + return true; + } + break; + } + break; + } + return false; +} + +// -------------------------------------------------------------------------------- +// Systray options window proc +BOOL CALLBACK ConfigSystrayWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + char temp[5]; + switch(uMsg) + { + case WM_INITDIALOG: + int def_button; + switch(default_action) + { + case WA_PREV: + def_button = IDC_DEF_PREV; + break; + case WA_PLAY: + def_button = IDC_DEF_PLAY; + break; + case WA_PAUSE: + def_button = IDC_DEF_PAUSE; + break; + case WA_STOP: + def_button = IDC_DEF_STOP; + break; + case WA_NEXT: + def_button = IDC_DEF_NEXT; + break; + } + + CheckRadioButton(hwndDlg,IDC_DEF_PREV,IDC_DEF_NEXT,def_button); + + wsprintf(temp,"%d",update_delay); + SetDlgItemText(hwndDlg,IDC_UPDATEDELAY,temp); + break; + + + case WM_NOTIFY: + switch (((NMHDR FAR *) lParam)->code) + { + case PSN_APPLY: update_delay = GetDlgItemInt(hwndDlg,IDC_UPDATEDELAY,NULL,false); + KillTimer(hwnd,timer_id); + timer_id = SetTimer(hwnd,TIMER_ID,update_delay*1000,NULL); + if (IsDlgButtonChecked(hwndDlg,IDC_DEF_PREV) == BST_CHECKED) + default_action = WA_PREV; + else + if (IsDlgButtonChecked(hwndDlg,IDC_DEF_PREV) == BST_CHECKED) + default_action = WA_PREV; + else + if (IsDlgButtonChecked(hwndDlg,IDC_DEF_PLAY) == BST_CHECKED) + default_action = WA_PLAY; + else + if (IsDlgButtonChecked(hwndDlg,IDC_DEF_PAUSE) == BST_CHECKED) + default_action = WA_PAUSE; + else + if (IsDlgButtonChecked(hwndDlg,IDC_DEF_STOP) == BST_CHECKED) + default_action = WA_STOP; + else + default_action = WA_NEXT; + + systray_modify(hwnd,1030,LoadIcon(inst, MAKEINTRESOURCE(GetIconID())),szAppName); + + break; + } + break; + } + return false; +} + + +// -------------------------------------------------------------------------------- +// Authentication options window proc +BOOL CALLBACK ConfigAuthWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + int use_auth_int; + switch(uMsg) + { + case WM_INITDIALOG: + SetDlgItemText(hwndDlg,IDC_USERNAME,username); + SetDlgItemText(hwndDlg,IDC_PASSWORD,password); + if (use_auth) + CheckDlgButton(hwndDlg,IDC_AUTH,1); + else + CheckDlgButton(hwndDlg,IDC_AUTH,0); + + + break; + + + case WM_NOTIFY: + switch (((NMHDR FAR *) lParam)->code) + { + case PSN_APPLY: GetDlgItemText(hwndDlg,IDC_USERNAME,username,20); + GetDlgItemText(hwndDlg,IDC_PASSWORD,password,20); + use_auth_int = IsDlgButtonChecked(hwndDlg,IDC_AUTH); + if (use_auth_int == 0) + use_auth = false; + else + use_auth = true; + + break; + } + break; + } + return false; +} + + +// -------------------------------------------------------------------------------- +// About window proc +BOOL CALLBACK ConfigAboutWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + switch(uMsg) + { + case WM_INITDIALOG: + break; + + + case WM_NOTIFY: + switch (((NMHDR FAR *) lParam)->code) + { + case PSN_APPLY: break; + } + break; + } + return false; +} + +// -------------------------------------------------------------------------------- +// WindowProc for Config dialog +BOOL CALLBACK ConfigWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) +{ + ConfigWnd = hwndDlg; // Keep global pointer to window so no more than one is active + char temp[100]; + switch (uMsg) + { + case WM_INITDIALOG: + int def_button; + switch(default_action) + { + case WA_PREV: + def_button = IDC_DEF_PREV; + break; + case WA_PLAY: + def_button = IDC_DEF_PLAY; + break; + case WA_PAUSE: + def_button = IDC_DEF_PAUSE; + break; + case WA_STOP: + def_button = IDC_DEF_STOP; + break; + case WA_NEXT: + def_button = IDC_DEF_NEXT; + break; + } + SetDlgItemText(hwndDlg,IDC_HOST,host); + wsprintf(temp,"%d",port); + SetDlgItemText(hwndDlg,IDC_PORT,temp); + wsprintf(temp,"%d",update_delay); + SetDlgItemText(hwndDlg,IDC_UPDATEDELAY,temp); + SetDlgItemText(hwndDlg,IDC_USERNAME,username); + SetDlgItemText(hwndDlg,IDC_PASSWORD,password); + CheckRadioButton(hwndDlg,IDC_DEF_PREV,IDC_DEF_NEXT,def_button); + break; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDCANCEL: EndDialog(hwndDlg,0); + break; + case IDABOUT: MessageBox(hwnd,AboutText,szAppName,MB_OK | MB_ICONINFORMATION); + break; + case IDOK: GetDlgItemText(hwndDlg,IDC_HOST,host,255); + port = GetDlgItemInt(hwndDlg,IDC_PORT,NULL,false); + update_delay = GetDlgItemInt(hwndDlg,IDC_UPDATEDELAY,NULL,false); + KillTimer(hwnd,timer_id); + timer_id = SetTimer(hwnd,TIMER_ID,update_delay*1000,NULL); + GetDlgItemText(hwndDlg,IDC_USERNAME,username,20); + GetDlgItemText(hwndDlg,IDC_PASSWORD,password,20); + if (IsDlgButtonChecked(hwndDlg,IDC_DEF_PREV) == BST_CHECKED) + default_action = WA_PREV; + else + if (IsDlgButtonChecked(hwndDlg,IDC_DEF_PREV) == BST_CHECKED) + default_action = WA_PREV; + else + if (IsDlgButtonChecked(hwndDlg,IDC_DEF_PLAY) == BST_CHECKED) + default_action = WA_PLAY; + else + if (IsDlgButtonChecked(hwndDlg,IDC_DEF_PAUSE) == BST_CHECKED) + default_action = WA_PAUSE; + else + if (IsDlgButtonChecked(hwndDlg,IDC_DEF_STOP) == BST_CHECKED) + default_action = WA_STOP; + else + default_action = WA_NEXT; + + systray_modify(hwnd,1030,LoadIcon(inst, MAKEINTRESOURCE(GetIconID())),szAppName); + config_write(); + EndDialog(hwndDlg,0); + break; + + } + } + return FALSE; +} + + + + + +// -------------------------------------------------------------------------------- +// write config +void config_write() +{ + char ini_file[MAX_PATH], *p; + char string[32]; + GetModuleFileName(inst,ini_file,sizeof(ini_file)); + p=ini_file+lstrlen(ini_file); + while (p >= ini_file && *p != '\\') p--; + if (++p >= ini_file) *p = 0; + lstrcat(ini_file,"client.ini"); + + wsprintf(string,"%d",port); + WritePrivateProfileString(szAppName,"port",string,ini_file); + + wsprintf(string,"%d",default_action); + WritePrivateProfileString(szAppName,"default",string,ini_file); + + wsprintf(string,"%d",update_delay); + WritePrivateProfileString(szAppName,"updatedelay",string,ini_file); + + if (use_auth) + WritePrivateProfileString(szAppName,"auth","1",ini_file); + else + WritePrivateProfileString(szAppName,"auth","0",ini_file); + + + WritePrivateProfileString(szAppName,"host",host,ini_file); + WritePrivateProfileString(szAppName,"username",username,ini_file); + WritePrivateProfileString(szAppName,"password",password,ini_file); + + +} + +// -------------------------------------------------------------------------------- +// read config (port and password) +void config_read() +{ + char ini_file[MAX_PATH], *p; + GetModuleFileName(inst,ini_file,sizeof(ini_file)); + p=ini_file+lstrlen(ini_file); + while (p >= ini_file && *p != '\\') p--; + if (++p >= ini_file) *p = 0; + lstrcat(ini_file,"client.ini"); + + GetPrivateProfileString(szAppName,"host","127.0.0.1",(char*)&host,255,ini_file); + GetPrivateProfileString(szAppName,"username","user",(char*)&username,20,ini_file); + GetPrivateProfileString(szAppName,"password","password",(char*)&password,20,ini_file); + + port = GetPrivateProfileInt(szAppName,"port",80,ini_file); + default_action = GetPrivateProfileInt(szAppName,"default",WA_NEXT,ini_file); + update_delay = GetPrivateProfileInt(szAppName,"updatedelay",10,ini_file); + + int use_auth_int = GetPrivateProfileInt(szAppName,"auth",0,ini_file); + if (use_auth_int == 1) + use_auth = true; + else + use_auth = false; + +} + + +// -------------------------------------------------------------------------------- +// WindowProc for Volume dialog +BOOL CALLBACK VolumeWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) +{ + char temp[50]; + VolumeWnd = hwndDlg; + HWND SliderWnd; + POINT mousepos; + + switch(uMsg) + { + case WM_INITDIALOG: + GetCursorPos(&mousepos); + SetWindowPos(hwndDlg,HWND_TOP,mousepos.x-46,mousepos.y-95,0,0,SWP_NOSIZE); + SliderWnd = GetDlgItem(hwndDlg,IDC_VOLUME); + SendMessage(SliderWnd, TBM_SETRANGE, (WPARAM) true, (LPARAM) MAKELONG(0,10)); + break; + + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case IDC_DONE: + EndDialog(hwndDlg,0); + break; + } + break; + + + case WM_VSCROLL: + DWORD dwPos; + + switch(LOWORD(wParam)) + { + case TB_THUMBTRACK: + case TB_LINEDOWN: + case TB_LINEUP: + case TB_PAGEDOWN: + case TB_PAGEUP: + + SliderWnd = GetDlgItem(hwndDlg,IDC_VOLUME); + dwPos = SendMessage(SliderWnd, TBM_GETPOS, 0, 0); + wsprintf(temp,"/vol?volume=%d",10-dwPos); + //MessageBox(SliderWnd,temp,"Slider Position",MB_OK | MB_TOPMOST); + WASend(temp); + return 0; + break; + + default: + break; + + } + break; + + + } + return false; +} + diff --git a/gen_httpSrv_systray/connection.cpp b/gen_httpSrv_systray/connection.cpp new file mode 100644 index 0000000..1fdf807 --- /dev/null +++ b/gen_httpSrv_systray/connection.cpp @@ -0,0 +1,340 @@ +#include <windows.h> +#include <winsock.h> + +#include "resource.h" +#include "main.h" + +extern char szAppName[]; +extern char username[20], password[20], title[255]; +extern char host[255]; +extern int port; + +extern bool use_auth; + +extern HWND hwnd; + + +// Base64 character array +// 0 1 2 3 4 5 6 +// 01234567890123456789012345678901234567890123456789012345678901234 +const char bchars[] = "=BCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+*"; + + +// -------------------------------------------------------------------------------- +// Start winsock +bool StartWinSock() +{ + WORD wVersionRequested = MAKEWORD(2,2); + WSADATA wsaData; + + if (WSAStartup(wVersionRequested, &wsaData ) != 0 ) + { + MessageBox(NULL, "ERROR: Winsock not available", szAppName, MB_OK); + return false; + } + return true; +} + + +// -------------------------------------------------------------------------------- +// Low level socket writing function - strings +void prints(SOCKET socket, char * string) +{ + int i=0; + while (string[i] != 0) + i++; + + if (send(socket,string,i,0) == SOCKET_ERROR) + { + //MessageBox(NULL,"Socket send() error!",szAppName,MB_OK); + } +} + +// Low level socket writing function - integers +void printsi(SOCKET socket,int number) +{ + char buffer[256]; + wsprintf(buffer,"%d",number); // Stick it in a string and call prints() + prints(socket,(char*)&buffer); +} + + +// -------------------------------------------------------------------------------- +// Opens socket +bool MakeRequest(char * host, int port, char * url, bool verbose, bool auth, bool gettitle) +{ + //MessageBox(NULL,"Entering MakeRequest","wawitray",MB_OK | MB_TOPMOST); + + SOCKET ssocket = socket(AF_INET,SOCK_STREAM,0); + if (ssocket == INVALID_SOCKET) + { + if (verbose) + MessageBox(NULL, "ERROR: Couldn't create socket", szAppName, MB_OK); + return false; + } + + + struct sockaddr_in server_address; + ZeroMemory(&server_address,sizeof(server_address)); + + server_address.sin_family = AF_INET; + + server_address.sin_addr.s_addr = inet_addr(host); + server_address.sin_port = htons(port); + + if (SOCKET_ERROR == connect(ssocket,(sockaddr*)&server_address,sizeof(sockaddr_in))) + { + if (verbose) + MessageBox(hwnd,"Couldn't connect to remote Winamp!\n\nCheck you have the address and port right.",szAppName,MB_OK|MB_ICONERROR); + return false; + } + + char method[6]; + if (gettitle) + wsprintf(method,"GET"); + else + wsprintf(method,"HEAD"); + + char request[100]; + + if (auth) + { + char b64userpass[100], userpass[100]; + wsprintf(userpass,"%s:%s",username,password); + ToBase64(userpass,b64userpass); + wsprintf(request,"%s %s HTTP/1.0\nAuthorisation: Basic %s\n\n",method,url,b64userpass); + } + else + { + wsprintf(request,"%s %s HTTP/1.0\nConnection: Close\n\n",method,url); + } + prints(ssocket,request); + + int res = GetResponse(ssocket,gettitle); + + closesocket(ssocket); + + switch(res) + { + case RES_OK: + break; + case RES_AUTH: + if (verbose) + MessageBox(hwnd,"Incorrect username or password!\n\nCheck the details are right in the Config window.",szAppName,MB_OK|MB_ICONERROR | MB_TOPMOST); + break; + case RES_NOTFOUND: + if (verbose) + MessageBox(hwnd,"Received a 404 Page Not Found response, which the Winamp HTTP Server does not produce!\n\nAre you sure your host and port settings are correct?",szAppName,MB_OK | MB_ICONERROR | MB_TOPMOST); + break; + case RES_BADREQUEST: + if (verbose) + MessageBox(hwnd,"Received a 400 Bad Request message, which the Winamp HTTP Server does not produce!\n\nCheck your Host and Port settings are correct.",szAppName, MB_OK | MB_ICONERROR | MB_TOPMOST); + case RES_UNKNOWN: + case RES_FAIL: + if (verbose) + MessageBox(hwnd,"Unknown HTTP Response",szAppName,MB_OK | MB_ICONWARNING | MB_TOPMOST); + break; + } + + //MessageBox(hwnd,"Leaving MakeRequest","wawitray",MB_OK | MB_TOPMOST); + return true; +} + + +int WASend(char * command) +{ + MakeRequest(host,port,command,true,use_auth,false); + return 1; +} + + + + +// -------------------------------------------------------------------------------- +// Converts a string to Base64 +void ToBase64(char * instr, char * outstr) +{ + //MessageBox(NULL,instr,"instr",MB_OK); + + int i=0; + int o=0; + int j = lstrlen(instr); + + bool done = false; + + while(instr[i] != 0 && done == false) + { + outstr[o] = bchars[(instr[i] & 0xFC) / 4]; + outstr[o+1] = bchars[((instr[i] & 0x03) * 16) + ((instr[i+1] & 0xF0) / 16)]; + if (instr[i+1] == 0) + { + outstr[o+2] = '='; + outstr[o+3] = '='; + done = true; + } + else + { + outstr[o+2] = bchars[((instr[i+1] & 0x0F) * 4) + ((instr[i+2] & 0xC0) /64)]; + if (instr[i+2] == 0) + { + outstr[o+3] = '='; + done = true; + } + else + outstr[o+3] = bchars[(instr[i+2] & 0x3F)]; + } + + o += 4; + i += 3; + } + + outstr[o] = 0; +} + + +// -------------------------------------------------------------------------------- +// Receives return HTTP header +int GetResponse(SOCKET socket, bool gettitle) +{ + char buffer[2048],http_version[20],response[5],text[100]; + int buffer_len; + int buffer_filled = 0; + int buffer_left; + bool complete = false; + + int breaks; + if (gettitle) + breaks = 1; + else + breaks = 0; + + + while(true) + { + // receive data + buffer_len = sizeof(buffer); + buffer_left = buffer_len-buffer_filled; + if (buffer_left <= 0) + buffer_len = 0; + else + buffer_len = recv(socket,buffer + buffer_filled,buffer_len-buffer_filled,0); + + if (buffer_len != SOCKET_ERROR && buffer_len != 0) + { + buffer_filled += buffer_len; + // scan for end of header + for (int i=0;i<=buffer_filled;i++) + if (buffer[i]=='\n' && (buffer[i+1]=='\n' || buffer[i+2]=='\n')) + { + if (breaks == 0) + { + buffer[i+1] = 0; + //MessageBox(NULL,buffer,"gen_httpsrv debug", MB_OK); + char * chptr = (char*)&buffer; + + chptr = GetAString(chptr,http_version); + chptr = GetAString(chptr,response); + chptr = GetAString(chptr,text); + chptr = SkipHeader(chptr); + + if (StrComp(response,"200")) + { + if (gettitle) + GetALine(chptr,title); + return RES_OK; + } + if (StrComp(response,"401")) + return RES_AUTH; + if (StrComp(response,"404")) + return RES_NOTFOUND; + if (StrComp(response,"400")) + return RES_BADREQUEST; + + return RES_UNKNOWN; + } + else + breaks--; + } + } + else + { + return RES_FAIL; + } + } +} + + + + +// -------------------------------------------------------------------------------- +// Retrieves next token from buffer +char * GetAString(char* chptr, char* text) // Old GetAString - only accepts single words +{ + int bptr = 0; + int tptr = 0; + while (chptr[bptr] == ' ' || chptr[bptr] == '\n' || chptr[bptr] == '\r') // skip leading spaces and stuff + bptr++; + + while (chptr[bptr] != 0 && chptr[bptr] != ' ' && chptr[bptr] != '\n' && chptr[bptr] != '\r' && bptr < 255) // while current char is a letter + { + text[tptr] = chptr[bptr]; // add letter to text[] + bptr++; + tptr++; + } + text[tptr] = 0; + chptr = chptr + bptr; + return chptr; // return pointer to the end of this string +} + +// -------------------------------------------------------------------------------- +// Skips the rest of the HTTP header +char * SkipHeader(char * chptr) +{ + while (chptr[0] != '\n' || (chptr[1] != '\n' && chptr[2] != '\r')) + chptr++; + return chptr; +} +// -------------------------------------------------------------------------------- +// Gets a whole line +char * GetALine(char * chptr, char * text) +{ + int bptr = 0; + int tptr = 0; + while (chptr[bptr] == ' ' || chptr[bptr] == '\n' || chptr[bptr] == '\r') // skip leading spaces and stuff + bptr++; + + while (chptr[bptr] != 0 && chptr[bptr] != '\n' && chptr[bptr] != '\r' && bptr < 255) // while current char is a letter + { + text[tptr] = chptr[bptr]; // add letter to text[] + bptr++; + tptr++; + } + text[tptr] = 0; + chptr = chptr + bptr; + return chptr; // return pointer to the end of this string +} + + +// -------------------------------------------------------------------------------- +// Strcmp() without using Clib +bool StrComp(char * string1, char * string2) +{ + int ptr=0; + + while (ToLowerCase(string1[ptr]) == ToLowerCase(string2[ptr])) // while the strings are the same, keep going + { + if (string1[ptr] == 0) // if they're the same and 0, they're identical null terminated strings + return true; + ptr++; + } + return false; // if not the same, they're... not the same +} + +// -------------------------------------------------------------------------------- +// Convert a char to lower case +char ToLowerCase(char c) +{ + if (c >= 'A' && c <= 'Z') + c += 32; + return c; +} diff --git a/gen_httpSrv_systray/gen_httpSrv_systray.dsp b/gen_httpSrv_systray/gen_httpSrv_systray.dsp new file mode 100644 index 0000000..95aa081 --- /dev/null +++ b/gen_httpSrv_systray/gen_httpSrv_systray.dsp @@ -0,0 +1,188 @@ +# Microsoft Developer Studio Project File - Name="gen_httpSrv_systray" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=gen_httpSrv_systray - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "gen_httpSrv_systray.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "gen_httpSrv_systray.mak" CFG="gen_httpSrv_systray - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "gen_httpSrv_systray - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "gen_httpSrv_systray - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "gen_httpSrv_systray - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib winmm.lib comctl32.lib /nologo /subsystem:windows /machine:I386 /out:"Release/wawitray.exe" + +!ELSEIF "$(CFG)" == "gen_httpSrv_systray - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /FD /GZ /c +# SUBTRACT CPP /YX +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib winmm.lib comctl32.lib /nologo /subsystem:windows /debug /machine:I386 /out:"Debug/wawitray.exe" /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "gen_httpSrv_systray - Win32 Release" +# Name "gen_httpSrv_systray - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\config.cpp +# End Source File +# Begin Source File + +SOURCE=.\connection.cpp +# End Source File +# Begin Source File + +SOURCE=.\main.cpp +# End Source File +# Begin Source File + +SOURCE=.\resource1.rc +# End Source File +# Begin Source File + +SOURCE=.\title.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\main.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\Images\auth2.ico +# End Source File +# Begin Source File + +SOURCE=.\Images\next.bmp +# End Source File +# Begin Source File + +SOURCE=.\next.ico +# End Source File +# Begin Source File + +SOURCE=.\Images\pause.bmp +# End Source File +# Begin Source File + +SOURCE=.\pause.ICO +# End Source File +# Begin Source File + +SOURCE=.\Images\play.bmp +# End Source File +# Begin Source File + +SOURCE=.\play.ico +# End Source File +# Begin Source File + +SOURCE=.\Images\prev.bmp +# End Source File +# Begin Source File + +SOURCE=.\prev.ico +# End Source File +# Begin Source File + +SOURCE=.\Images\SECUR08.ICO +# End Source File +# Begin Source File + +SOURCE=.\Images\server.ico +# End Source File +# Begin Source File + +SOURCE=.\Images\stop.bmp +# End Source File +# Begin Source File + +SOURCE=.\stop.ico +# End Source File +# Begin Source File + +SOURCE=.\Images\Title.bmp +# End Source File +# Begin Source File + +SOURCE=.\Images\winamp.ico +# End Source File +# End Group +# End Target +# End Project diff --git a/gen_httpSrv_systray/gen_httpSrv_systray.dsw b/gen_httpSrv_systray/gen_httpSrv_systray.dsw new file mode 100644 index 0000000..0bcb1fb --- /dev/null +++ b/gen_httpSrv_systray/gen_httpSrv_systray.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "gen_httpSrv_systray"=.\gen_httpSrv_systray.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/gen_httpSrv_systray/main.cpp b/gen_httpSrv_systray/main.cpp new file mode 100644 index 0000000..4a1f3ec --- /dev/null +++ b/gen_httpSrv_systray/main.cpp @@ -0,0 +1,333 @@ +#include <windows.h> +#include <winsock.h> + +#include "main.h" +#include "resource.h" + +char szAppName[] = "Wawi Tray"; +char szWndClass[] = "WawiTrayApp"; + +char AboutText[] = "Winamp Web Interface\n\nRemote SysTray Client\n\n© 2002 Phil Himsworth\n\nWeb: http://www.flippet.org\nEmail: contact@flippet.net"; + +HINSTANCE inst = NULL; +HWND hwnd = NULL; +HWND ConfigWnd = NULL; +HWND VolumeWnd = NULL; + +UINT timer_id; + +bool done = false; + +char username[20]; +char password[20]; +char host[255]; + +char title[255]; + +bool use_auth = false; + +int port; +int default_action; +int update_delay; + +int APIENTRY WinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpCmdLine, + int nCmdShow) +{ + + inst = hInstance; + + WNDCLASSEX wc; + + wc.cbSize = sizeof(wc); + wc.style = CS_HREDRAW | CS_VREDRAW; + wc.lpfnWndProc = WndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = inst; + wc.hIcon = NULL; + wc.hCursor = NULL; + wc.hbrBackground = (HBRUSH)COLOR_BACKGROUND; + wc.lpszMenuName = NULL; //MAKEINTRESOURCE(IDR_MENU); + wc.lpszClassName = szWndClass; + wc.hIconSm = NULL; + + if (RegisterClassEx(&wc)==0) + MessageBox(NULL,"RegisterClassEx error!", szAppName,MB_OK); + + + hwnd = CreateWindowEx( 0, + szWndClass, + szAppName, + WS_CAPTION | WS_SYSMENU, + CW_USEDEFAULT, + CW_USEDEFAULT, + 200, + 100, + NULL, + NULL, + inst, + NULL); + + + // Shows the window. Used only for message debugging + //ShowWindow(hwnd,nShowCmd); + + StartWinSock(); + + config_read(); + + int default_icon = GetIconID(); + + if (systray_add(hwnd,1030,LoadIcon(inst, MAKEINTRESOURCE(default_icon)),szAppName) == 0) + MessageBox(hwnd,"systray_add error",szAppName,MB_OK); + + /* + UINT SetTimer( + HWND hWnd, // handle of window for timer messages + UINT nIDEvent, // timer identifier + UINT uElapse, // time-out value + TIMERPROC lpTimerFunc // address of timer procedure + ); + */ + + timer_id = SetTimer(hwnd,TIMER_ID,update_delay*1000,NULL); + + + //HANDLE titlethread; + //DWORD titlethread_id; + + //titlethread = CreateThread(NULL,0,TitleThread,0,0,&titlethread_id); + + MSG msg; + ZeroMemory(&msg,sizeof(msg)); + + while(done == false) + { + GetMessage(&msg,hwnd,0,0); + DispatchMessage(&msg); + } + + + systray_del(hwnd,1030); + return 0; + +} + +void SendDefaultAction() +{ + switch(default_action) + { + case WA_PREV: + WASend("/prev"); + break; + case WA_PLAY: + WASend("/play"); + break; + case WA_PAUSE: + WASend("/pause"); + break; + case WA_STOP: + WASend("/stop"); + break; + case WA_NEXT: + WASend("/next"); + break; + } +} + +int GetIconID() +{ + switch(default_action) + { + case WA_PREV: + return IDI_PREV; + break; + case WA_PLAY: + return IDI_PLAY; + break; + case WA_PAUSE: + return IDI_PAUSE; + break; + case WA_STOP: + return IDI_STOP; + break; + case WA_NEXT: + return IDI_NEXT; + break; + default: + return 0; + } +} + + + +LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + UINT mousemsg; + HMENU menu; + char path[MAX_PATH]; + + switch(uMsg) + { + case WM_DESTROY: + PostQuitMessage(0); + done = true; + break; + + case WM_USER+3: + mousemsg = (UINT)lParam; + switch(mousemsg) + { + case WM_LBUTTONDOWN: + SendDefaultAction(); + break; + + case WM_RBUTTONDOWN: + menu = GetSubMenu(LoadMenu(inst,MAKEINTRESOURCE(IDR_MENU)),0); + POINT pt; + GetCursorPos(&pt); + SetForegroundWindow(hwnd); + SetMenuItemBitmaps(menu,IDM_PREV,MF_BYCOMMAND,LoadBitmap(inst,MAKEINTRESOURCE(IDB_PREV)),NULL); + SetMenuItemBitmaps(menu,IDM_PLAY,MF_BYCOMMAND,LoadBitmap(inst,MAKEINTRESOURCE(IDB_PLAY)),NULL); + SetMenuItemBitmaps(menu,IDM_PAUSE,MF_BYCOMMAND,LoadBitmap(inst,MAKEINTRESOURCE(IDB_PAUSE)),NULL); + SetMenuItemBitmaps(menu,IDM_STOP,MF_BYCOMMAND,LoadBitmap(inst,MAKEINTRESOURCE(IDB_STOP)),NULL); + SetMenuItemBitmaps(menu,IDM_NEXT,MF_BYCOMMAND,LoadBitmap(inst,MAKEINTRESOURCE(IDB_NEXT)),NULL); + + TrackPopupMenu(menu,0,pt.x,pt.y,0,hwnd,NULL); + //SetMenuDefaultItem(menu,IDM_NEXT,FALSE); + PostMessage(hwnd,WM_NULL,0,0); + break; + + default: + break; + } + break; + + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case IDM_QUIT: + done = true; + DestroyWindow(hwnd); + break; + case IDM_ABOUT: + MessageBox(hwnd,AboutText,szAppName,MB_OK | MB_ICONINFORMATION); + break; + case IDM_CONFIG: + if (!ConfigWnd) + { + NewConfig(); + ConfigWnd = NULL; + } + else + SetActiveWindow(ConfigWnd); + break; + + case IDM_VOLUME: + if (!VolumeWnd) + { + DialogBox(inst,MAKEINTRESOURCE(IDD_VOLUME),hwnd,VolumeWndProc); + VolumeWnd = NULL; + } + else + SetActiveWindow(VolumeWnd); + break; + + case IDM_BROWSE: + wsprintf(path,"http://%s:%d/winamp?page=browse",host,port); + //MessageBox(hwnd,path,"Browse Path",MB_OK | MB_TOPMOST); + ShellExecute(hwnd,"open",path,NULL,NULL,0); + break; + + case IDM_PLAYLIST: + wsprintf(path,"http://%s:%d/winamp?page=list",host,port); + //MessageBox(hwnd,path,"Browse Path",MB_OK | MB_TOPMOST); + ShellExecute(hwnd,"open",path,NULL,NULL,0); + break; + + // Winamp Control Items + case IDM_PREV: + WASend("/prev"); + break; + case IDM_PLAY: + WASend("/play"); + break; + case IDM_PAUSE: + WASend("/pause"); + break; + case IDM_STOP: + WASend("/stop"); + break; + case IDM_NEXT: + WASend("/next"); + break; + + + } + break; + + case WM_TIMER: + if ((UINT)wParam == timer_id) + { + MakeRequest(host,port,"/smalltitle",false,false,true); + if (StrComp(title,"")) + wsprintf(title,"%s",szAppName); + systray_modify(hwnd,1030,LoadIcon(inst, MAKEINTRESOURCE(GetIconID())),title); + } + break; + + + default: + return DefWindowProc(hwnd,uMsg,wParam,lParam); + break; + } + + return 0; + +} + + + + + + + + +int systray_modify(HWND hwnd, UINT uID, HICON hIcon, LPSTR lpszTip) +{ + NOTIFYICONDATA tnid; + tnid.cbSize = sizeof(NOTIFYICONDATA); + tnid.hWnd = hwnd; + tnid.uID = uID; + tnid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE; + tnid.uCallbackMessage = WM_USER+3; + tnid.hIcon = hIcon; + lstrcpyn(tnid.szTip, lpszTip, sizeof(tnid.szTip)-1); + return (Shell_NotifyIcon(NIM_MODIFY, &tnid)); +} + + + +int systray_add(HWND hwnd, UINT uID, HICON hIcon, LPSTR lpszTip) +{ + NOTIFYICONDATA tnid; + tnid.cbSize = sizeof(NOTIFYICONDATA); + tnid.hWnd = hwnd; + tnid.uID = uID; + tnid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE; + tnid.uCallbackMessage = WM_USER+3; + tnid.hIcon = hIcon; + lstrcpyn(tnid.szTip, lpszTip, sizeof(tnid.szTip)-1); + return (Shell_NotifyIcon(NIM_ADD, &tnid)); +} + +int systray_del(HWND hwnd, UINT uID) +{ + NOTIFYICONDATA tnid; + tnid.cbSize = sizeof(NOTIFYICONDATA); + tnid.hWnd = hwnd; + tnid.uID = uID; + return (Shell_NotifyIcon(NIM_DELETE, &tnid)); +} diff --git a/gen_httpSrv_systray/main.h b/gen_httpSrv_systray/main.h new file mode 100644 index 0000000..f3c156d --- /dev/null +++ b/gen_httpSrv_systray/main.h @@ -0,0 +1,61 @@ + +// Winamp actions +#define WA_PREV 101 +#define WA_PLAY 102 +#define WA_PAUSE 103 +#define WA_STOP 104 +#define WA_NEXT 105 + +#define RES_OK 201 +#define RES_AUTH 202 +#define RES_NOTFOUND 205 +#define RES_BADREQUEST 206 +#define RES_UNKNOWN 203 +#define RES_FAIL 204 + +#define TIMER_ID 30 + + +// config.cpp +void NewConfig(); +BOOL CALLBACK ConfigServerWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); +BOOL CALLBACK ConfigSystrayWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); +BOOL CALLBACK ConfigAuthWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); +BOOL CALLBACK ConfigAboutWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); +BOOL CALLBACK ConfigWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam); +void config_write(); +void config_read(); +BOOL CALLBACK VolumeWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam); + + + +// connection.cpp +bool StartWinSock(); +void prints(SOCKET socket, char * string); +void printsi(SOCKET socket,int number); +bool MakeRequest(char * host, int port, char * url, bool verbose, bool auth, bool gettitle); +int WASend(char * command); +void ToBase64(char * instr, char * outstr); +int GetResponse(SOCKET socket, bool gettitle); +char * GetAString(char* chptr, char* text); +char * SkipHeader(char * chptr); +char * GetALine(char * chptr, char * text); +bool StrComp(char * string1, char * string2); +char ToLowerCase(char c); + +// main.cpp +int APIENTRY WinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpCmdLine, + int nCmdShow); + +void SendDefaultAction(); +int GetIconID(); +LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); +int systray_modify(HWND hwnd, UINT uID, HICON hIcon, LPSTR lpszTip); +int systray_add(HWND hwnd, UINT uID, HICON hIcon, LPSTR lpszTip); +int systray_del(HWND hwnd, UINT uID); + + +// title.cpp +DWORD WINAPI TitleThread(LPVOID param); diff --git a/gen_httpSrv_systray/next.ico b/gen_httpSrv_systray/next.ico new file mode 100644 index 0000000000000000000000000000000000000000..96fa9bdc547f94adfcadd846c9a628fd94fa00fc GIT binary patch literal 1078 zcmb7DIc@_n44m}_NEhu7vQ^+;Bu~@R^pun?U8V@2%#fm1kZmBA&2xB3rhx?~?E40t z%L(|P+%~t*3-GoAXZm*17iqx@IglB9|73zha&|#Z6{QqP0oA^!RT_yOxx{p+bp6(L z^oW@3!}M~sCb~psi#IZd7(r3DV;UuxGf}Ys8%-1TDGf)W?G@bC)D}y#UFrxha0uvj ztMJfPF`mGqVc3ouKF`zVo$upzyJ!<P@1dSvoUNw!Y(R&PYug}}Fbrn14#Bfs%UVUh zz^CZSXA>1*9m(>ZU}LWIs2hEvul8J<zmsCm3-$XabH|Brr%jMk{pX(Z*W(brHB{Q0 zByOq@Zk*oy%12CX^%$%m3UiFo{1z8^Q77v5K2q53=N<Td<*fW~Xa2`Uk51r<RgQB1 E0BNVJUjP6A literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/pause.ICO b/gen_httpSrv_systray/pause.ICO new file mode 100644 index 0000000000000000000000000000000000000000..9c87a8788606ebe06df1367e7bba41f4c044edfd GIT binary patch literal 1078 zcmdT@JB|V|41FOZ(ap>a7-^*y)m~va1vh{WYD#NQmZKnTLrF=oQg}{cCJYo%t{KPg zId+_n0UTx+h8`-X8SqKl_n9vp(0X7=-#}ea9U6`l#y%GT_(3Eaj)Vvy(CS1?A7WHQ z<xgEYs1V%nBhRyA#DtGDFE`;eEk!F=t_^hOvWv8ril^9r%qQoWp4aZ)uH=!I$H@WX z<BYrt(CK=G%*|u$j>q7m>L2i}%6HJW=mOx2g7$4;j^!t7>slSFt9{;62deeC5I+}T zk8_4SoeW397yG=6k(&Tb0_6e|rK5{_ZgswAOCIx+<R!Gvt&RfLy)69pIR8TM4&pw% f5CIK0^vi$sj#zp71FRcyIE!oP+2A<eGxvZi<@@w; literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/play.ico b/gen_httpSrv_systray/play.ico new file mode 100644 index 0000000000000000000000000000000000000000..5f47614508fdb8561d6089794075fe7699ad8913 GIT binary patch literal 1078 zcmb7DOR~Zs5bPMM-cEA^v$DL!^JpB6qqua*(uGyn4Ge)8s}voWp6(gG0S4?a&lA+{ zJK)T5nlio&z+nU~jLozwZNQ#A;HcehjwBi9^1z-hy!RYM#Pmmu@@V`iq)v@a_1|%3 z7sU!MkX|iTqE_2P1&1|0)<AMXS&~Hqs-W<_AfOizcLL$If^aL?!fU;)MI-esE!@(? zM(23lkL|zGg}3ZgosIMCC+hbh)K<vYB8EB~{TO9W;9tg_j55C%=>Oc9)7D5eRoCXR zdG*dG+Dx-|?&)tg$2U%fZ#oU^>3;dndE{I`z8E_B#07O1ft{VK-Cfm`fZchGE3xD$ iU(haknMcW-?r{Qce_SiSZO3n1>;KdePmQ$7QSJ*%5g*b3 literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/prev.ico b/gen_httpSrv_systray/prev.ico new file mode 100644 index 0000000000000000000000000000000000000000..198c6b2b172e7fe75c973b4ce35b3806441d0cfc GIT binary patch literal 1078 zcma)5Np8b13>?P=dTacH`c&i>?bGx$J*CGUee9utI>W_M76V~Ik<^eQnwEhHC#>rN z$<GP+pj{S^FB9-K0~hYC)Gz9U7p_2I?qewgiIn1oD_zuDX$3U<qcwR{{<Nh<LTC5y zV@G?&P25ALvv}i5?c9w0JcsFTL#!5}AK@E)sn<BoPGv9%3pY{Ak_ZKv+`xhF@If3i zA;SURo)EZNz3RsvJL-*u3HdxuDsJPCLo|zV9zHAbXBT~*PB1=Nwqe;>V4Dm~JR_qx z(;uVNxk>+kPbphHODiys+KZp_##;Hwo9E=Yy5|dZrRF`a^dC#%9Vfy&ZH6n|C-3>$ zFAj}gFrSci^`q5S!8vbym%@0CEE~VFxgU91mpt)$I6-l!SP1a@4t&3|SAN@t-?;Qh K5?8KjRQnIA*v7p8 literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/resource.h b/gen_httpSrv_systray/resource.h new file mode 100644 index 0000000..40ae1b8 --- /dev/null +++ b/gen_httpSrv_systray/resource.h @@ -0,0 +1,67 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by resource1.rc +// +#define IDABOUT 3 +#define IDI_ICON1 101 +#define IDI_NEXT 101 +#define IDI_ICON2 102 +#define IDI_PAUSE 102 +#define IDI_ICON3 103 +#define IDI_PLAY 103 +#define IDI_ICON4 104 +#define IDI_PREV 104 +#define IDI_ICON5 105 +#define IDI_STOP 105 +#define IDD_CONFIG 106 +#define IDR_MENU 107 +#define IDD_VOLUME 108 +#define IDB_STOP 109 +#define IDB_PAUSE 110 +#define IDB_PLAY 111 +#define IDB_PREV 112 +#define IDB_NEXT 113 +#define IDD_SERVER 114 +#define IDD_AUTH 115 +#define IDD_SYSTRAY 116 +#define IDD_ABOUT 117 +#define IDB_TITLE 119 +#define IDI_WINAMP 120 +#define IDI_SERVER 121 +#define IDI_AUTH 122 +#define IDI_AUTH2 123 +#define IDC_HOST 1001 +#define IDC_PORT 1002 +#define IDC_USERNAME 1003 +#define IDC_PASSWORD 1005 +#define IDC_VOLUME 1006 +#define IDC_DONE 1007 +#define IDC_DEF_PREV 1008 +#define IDC_DEF_PLAY 1009 +#define IDC_DEF_PAUSE 1010 +#define IDC_DEF_STOP 1011 +#define IDC_DEF_NEXT 1012 +#define IDC_UPDATEDELAY 1013 +#define IDC_AUTH 1014 +#define IDM_PREV 40001 +#define IDM_PLAY 40002 +#define IDM_PAUSE 40003 +#define IDM_STOP 40004 +#define IDM_NEXT 40005 +#define IDM_CONFIG 40006 +#define IDM_QUIT 40007 +#define IDM_ABOUT 40008 +#define IDM_VOLUME 40009 +#define IDM_PLAYLIST 40010 +#define IDM_BROWSE 40011 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 124 +#define _APS_NEXT_COMMAND_VALUE 40012 +#define _APS_NEXT_CONTROL_VALUE 1017 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/gen_httpSrv_systray/resource1.aps b/gen_httpSrv_systray/resource1.aps new file mode 100644 index 0000000000000000000000000000000000000000..4f51c12da2b3273dc7c8ebf839b85f25e65f2474 GIT binary patch literal 73584 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%0D21&;S9w}^@;~bnE)wgYYA_0kXc~{PXl9ZjBf^y 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 literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/resource1.rc b/gen_httpSrv_systray/resource1.rc new file mode 100644 index 0000000..a926aeb --- /dev/null +++ b/gen_httpSrv_systray/resource1.rc @@ -0,0 +1,363 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_PAUSE ICON DISCARDABLE "pause.ICO" +IDI_PLAY ICON DISCARDABLE "play.ico" +IDI_PREV ICON DISCARDABLE "prev.ico" +IDI_STOP ICON DISCARDABLE "stop.ico" + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDR_MENU MENU DISCARDABLE +BEGIN + POPUP "Menu" + BEGIN + MENUITEM "&Config...", IDM_CONFIG + MENUITEM "&Quit", IDM_QUIT + MENUITEM SEPARATOR + MENUITEM "Music Collection...", IDM_BROWSE + MENUITEM "Playlist...", IDM_PLAYLIST + MENUITEM "Volume...", IDM_VOLUME + MENUITEM SEPARATOR + MENUITEM "P&revious Track", IDM_PREV + MENUITEM "&Play", IDM_PLAY + MENUITEM "Pa&use", IDM_PAUSE + MENUITEM "&Stop", IDM_STOP + MENUITEM "&Next Track", IDM_NEXT + END +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// English (U.K.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_NEXT ICON DISCARDABLE "next.ico" +IDI_WINAMP ICON DISCARDABLE "Images\\winamp.ico" +IDI_SERVER ICON DISCARDABLE "Images\\server.ico" +IDI_AUTH ICON DISCARDABLE "Images\\SECUR08.ICO" +IDI_AUTH2 ICON DISCARDABLE "images\\auth2.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_CONFIG DIALOGEX 0, 0, 286, 212 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Winamp HTTP Server Systray Client Config" +FONT 8, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "OK",IDOK,229,7,50,14 + PUSHBUTTON "Cancel",IDCANCEL,229,39,50,14 + PUSHBUTTON "About",IDABOUT,229,23,50,14 + GROUPBOX "Remote Winamp Properties",IDC_STATIC,7,7,218,43 + EDITTEXT IDC_HOST,13,29,98,12,ES_AUTOHSCROLL | NOT WS_BORDER, + WS_EX_STATICEDGE + EDITTEXT IDC_PORT,120,29,35,12,ES_AUTOHSCROLL | ES_NUMBER | NOT + WS_BORDER,WS_EX_STATICEDGE + LTEXT "Remote Computer",IDC_STATIC,13,19,72,9 + LTEXT "Port",IDC_STATIC,120,19,24,9 + EDITTEXT IDC_USERNAME,13,75,98,12,ES_AUTOHSCROLL | NOT WS_BORDER, + WS_EX_STATICEDGE + EDITTEXT IDC_PASSWORD,120,75,98,12,ES_PASSWORD | ES_AUTOHSCROLL | + NOT WS_BORDER,WS_EX_STATICEDGE + LTEXT "Username",IDC_STATIC,13,65,59,8 + LTEXT "Password",IDC_STATIC,120,65,50,8 + GROUPBOX "Systray Settings",IDC_STATIC,7,97,218,65 + CONTROL "Previous",IDC_DEF_PREV,"Button",BS_AUTORADIOBUTTON,15, + 122,45,10 + CONTROL "Play",IDC_DEF_PLAY,"Button",BS_AUTORADIOBUTTON,15,132, + 50,10 + CONTROL "Pause",IDC_DEF_PAUSE,"Button",BS_AUTORADIOBUTTON,71,122, + 50,10 + CONTROL "Stop",IDC_DEF_STOP,"Button",BS_AUTORADIOBUTTON,71,132, + 45,10 + CONTROL "Next",IDC_DEF_NEXT,"Button",BS_AUTORADIOBUTTON,131,122, + 50,10 + LTEXT "Default Action (single click on tray icon)",IDC_STATIC, + 16,109,140,10 + EDITTEXT IDC_UPDATEDELAY,120,145,35,12,ES_AUTOHSCROLL | ES_NUMBER | + NOT WS_BORDER,WS_EX_STATICEDGE + RTEXT "Tooltip update delay (s)",IDC_STATIC,39,147,75,10 + GROUPBOX "Authentication",IDC_STATIC,7,53,218,44 +END + +IDD_VOLUME DIALOGEX 0, 0, 46, 95 +STYLE DS_SYSMODAL | DS_SETFOREGROUND | WS_POPUP | WS_CAPTION +EXSTYLE WS_EX_TOOLWINDOW +FONT 8, "MS Sans Serif" +BEGIN + CONTROL "Slider1",IDC_VOLUME,"msctls_trackbar32",TBS_AUTOTICKS | + TBS_VERT | TBS_TOP | WS_TABSTOP,20,5,20,70 + PUSHBUTTON "Done",IDC_DONE,8,80,27,10 + LTEXT "100%",IDC_STATIC,1,9,18,10 + LTEXT "0%",IDC_STATIC,9,64,10,10 +END + +IDD_SERVER DIALOGEX 0, 0, 220, 129 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Dialog" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Winamp Server",IDC_STATIC,7,7,206,54 + EDITTEXT IDC_HOST,13,29,118,12,ES_AUTOHSCROLL | NOT WS_BORDER, + WS_EX_STATICEDGE + EDITTEXT IDC_PORT,141,29,35,12,ES_AUTOHSCROLL | ES_NUMBER | NOT + WS_BORDER,WS_EX_STATICEDGE + LTEXT "Remote Computer IP Address",IDC_STATIC,13,19,100,9 + LTEXT "Port",IDC_STATIC,141,19,24,9 +END + +IDD_AUTH DIALOGEX 0, 0, 220, 129 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Dialog" +FONT 8, "MS Sans Serif" +BEGIN + EDITTEXT IDC_USERNAME,13,44,86,12,ES_AUTOHSCROLL | NOT WS_BORDER, + WS_EX_STATICEDGE + EDITTEXT IDC_PASSWORD,107,44,98,12,ES_PASSWORD | ES_AUTOHSCROLL | + NOT WS_BORDER,WS_EX_STATICEDGE + LTEXT "Username",IDC_STATIC,13,33,59,8 + LTEXT "Password",IDC_STATIC,107,33,50,8 + GROUPBOX "Authentication",IDC_STATIC,7,7,206,58 + CONTROL "Use Authentication",IDC_AUTH,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,19,165,11 +END + +IDD_SYSTRAY DIALOGEX 0, 0, 220, 129 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Dialog" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Systray Settings",IDC_STATIC,7,7,206,70 + CONTROL "Previous",IDC_DEF_PREV,"Button",BS_AUTORADIOBUTTON,26, + 34,45,10 + CONTROL "Play",IDC_DEF_PLAY,"Button",BS_AUTORADIOBUTTON,26,44,50, + 10 + CONTROL "Pause",IDC_DEF_PAUSE,"Button",BS_AUTORADIOBUTTON,90,34, + 50,10 + CONTROL "Stop",IDC_DEF_STOP,"Button",BS_AUTORADIOBUTTON,90,44,45, + 10 + CONTROL "Next",IDC_DEF_NEXT,"Button",BS_AUTORADIOBUTTON,151,34, + 50,10 + LTEXT "Default Action (single click on tray icon)",IDC_STATIC, + 16,21,140,10 + EDITTEXT IDC_UPDATEDELAY,120,57,35,12,ES_AUTOHSCROLL | ES_NUMBER | + NOT WS_BORDER,WS_EX_STATICEDGE + RTEXT "Tooltip update delay (s)",IDC_STATIC,39,59,75,10 +END + +IDD_ABOUT DIALOG DISCARDABLE 0, 0, 220, 129 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Dialog" +FONT 8, "MS Sans Serif" +BEGIN + CONTROL 119,IDC_STATIC,"Static",SS_BITMAP,7,7,20,20 + CTEXT "Wawi Remote Systray Thingy\n\nPhil Himsworth, 2002\nhttp://www.flippet.org || contact@flippet.net", + IDC_STATIC,7,81,206,34 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO DISCARDABLE +BEGIN + IDD_CONFIG, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 279 + TOPMARGIN, 7 + BOTTOMMARGIN, 205 + END + + IDD_VOLUME, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 39 + TOPMARGIN, 7 + BOTTOMMARGIN, 88 + END + + IDD_SERVER, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 213 + TOPMARGIN, 7 + BOTTOMMARGIN, 122 + END + + IDD_AUTH, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 213 + TOPMARGIN, 7 + BOTTOMMARGIN, 122 + END + + IDD_SYSTRAY, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 213 + TOPMARGIN, 7 + BOTTOMMARGIN, 122 + END + + IDD_ABOUT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 213 + TOPMARGIN, 7 + BOTTOMMARGIN, 122 + END +END +#endif // APSTUDIO_INVOKED + + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 2,1,0,1 + PRODUCTVERSION 2,1,0,1 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "080904b0" + BEGIN + VALUE "Comments", "Remote Systray Applet for the Winamp Web Interface Plugin\0" + VALUE "CompanyName", "\0" + VALUE "FileDescription", "WawiTray\0" + VALUE "FileVersion", "2, 1, 0, 1\0" + VALUE "InternalName", "WawiTray\0" + VALUE "LegalCopyright", "Copyright © 2002 Phil Himsworth\0" + VALUE "LegalTrademarks", "It's mine, dammit, MINE!!!\0" + VALUE "OriginalFilename", "WawiTray.exe\0" + VALUE "PrivateBuild", "\0" + VALUE "ProductName", "WawiTray\0" + VALUE "ProductVersion", "2, 1, 0, 1\0" + VALUE "SpecialBuild", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x809, 1200 + END +END + +#endif // !_MAC + + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +IDB_STOP BITMAP DISCARDABLE "Images\\stop.bmp" +IDB_PAUSE BITMAP DISCARDABLE "Images\\pause.bmp" +IDB_PLAY BITMAP DISCARDABLE "Images\\play.bmp" +IDB_PREV BITMAP DISCARDABLE "Images\\prev.bmp" +IDB_NEXT BITMAP DISCARDABLE "Images\\next.bmp" +IDB_TITLE BITMAP DISCARDABLE "Images\\Title.bmp" +#endif // English (U.K.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/gen_httpSrv_systray/stop.ico b/gen_httpSrv_systray/stop.ico new file mode 100644 index 0000000000000000000000000000000000000000..6756fd931252153f6e40109918cd923f8c6de647 GIT binary patch literal 1078 zcmdT@J8r`;41JCZWUGCHdJ1xj_Gmhqj*>B>#|#D7_bAg+93x1_$mZwqBhm~5bU0v| zM(A7*z=?7k3qE(iXAhidn@B&T4j<$|V(k7&bkdVj5#&^nbEcHT{Dqk`5+9kwbf~QQ zBQD+=vB4FV>o&NBOVP&EG_k03dQYV-Z>_<e`cAkGdH?&C*~duYx2X6oKwlm%NuNYD zl)-Fqq!h1siEwPWH_<QfEt-Krl!3k_5B>*hbEU_<Q77tZ&$amzY29<``zLY7>ETYh zAgB7`o)2bh0u-(+GjK@5;Ip*3?l5D0P|s!L#Xak6qmBx)?(NI$a%8XkZ>P>g>z=a? PBPynEmS3^TVeb3~uz$lB literal 0 HcmV?d00001 diff --git a/gen_httpSrv_systray/title.cpp b/gen_httpSrv_systray/title.cpp new file mode 100644 index 0000000..4f311aa --- /dev/null +++ b/gen_httpSrv_systray/title.cpp @@ -0,0 +1,32 @@ +#include <windows.h> +#include <winsock.h> + +#include "main.h" + +extern HINSTANCE inst; +extern HWND hwnd; + +extern char host[255], username[20], password[20], title[255]; +extern int port, default_action, update_delay; + +extern char szAppName[], AboutText[]; + +extern HWND ConfigWnd, VolumeWnd; + +// -------------------------------------------------------------------------------- +// Thread to update title in systray tooltip +DWORD WINAPI TitleThread(LPVOID param) +{ + while(true) + { + MakeRequest(host,port,"/smalltitle",false,false,true); + if (StrComp(title,"")) + wsprintf(title,"%s",szAppName); + systray_modify(hwnd,1030,LoadIcon(inst, MAKEINTRESOURCE(GetIconID())),title); + //MessageBox(hwnd,title,"Title",MB_OK | MB_TOPMOST); + Sleep(update_delay*1000); + } + + return true; +} + diff --git a/gen_httpSrv_systray/wawitray.exe b/gen_httpSrv_systray/wawitray.exe new file mode 100644 index 0000000000000000000000000000000000000000..36bd520df6f73e6240f150d4c0abdd1c0d0cbfab GIT binary patch literal 94208 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 literal 0 HcmV?d00001 diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..12d7010 --- /dev/null +++ b/install.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# Winamp MPRIS Bridge Installer (FreeDesktop/XDG compliant) + +set -e + +# Configuration +BIN_DIR="$HOME/.local/bin" +SERVICE_NAME="winamp-mpris.service" +SYSTEMD_USER_DIR="$HOME/.config/systemd/user" + +echo "Installing Winamp MPRIS Bridge..." + +# 1. Create necessary directories +echo "Creating directories..." +mkdir -p "$BIN_DIR" +mkdir -p "$SYSTEMD_USER_DIR" + +# 2. Copy files to the correct locations +echo "Copying files..." +# Install the script to ~/.local/bin/winamp-mpris (removing .py extension for cleaner usage) +cp winamp_mpris.py "$BIN_DIR/winamp-mpris" +chmod +x "$BIN_DIR/winamp-mpris" + +# Install the service file +cp "$SERVICE_NAME" "$SYSTEMD_USER_DIR/" + +# 3. Reload systemd and enable/start the service +echo "Configuring systemd service..." +systemctl --user daemon-reload +systemctl --user enable "$SERVICE_NAME" +systemctl --user restart "$SERVICE_NAME" + +echo "Installation complete!" +echo "Script installed to: $BIN_DIR/winamp-mpris" +echo "Logs available at: ~/.local/state/winamp-mpris/bridge.log" +echo "PID file at: \$XDG_RUNTIME_DIR/winamp-mpris.pid" + +systemctl --user status "$SERVICE_NAME" --no-pager diff --git a/winamp-mpris.service b/winamp-mpris.service index 827c0af..5e9f95c 100644 --- a/winamp-mpris.service +++ b/winamp-mpris.service @@ -4,7 +4,7 @@ After=network.target [Service] Type=simple -ExecStart=/usr/bin/python3 %h/Scripts/winamp-mpris/winamp_mpris.py +ExecStart=%h/.local/bin/winamp-mpris Restart=always RestartSec=5 diff --git a/winamp_mpris.py b/winamp_mpris.py index eef0076..5f798b5 100755 --- a/winamp_mpris.py +++ b/winamp_mpris.py @@ -3,18 +3,49 @@ import requests import time import re import subprocess +import os +import logging from threading import Thread from pydbus import SessionBus from pydbus.generic import signal from gi.repository import GLib from bs4 import BeautifulSoup -# --- CONFIGURATION --- +# --- CONFIGURATION & XDG PATHS --- BASE_URL = "http://localhost:5666" AUTH = ('winamp', 'llama') APP_ID = "org.mpris.MediaPlayer2.winamp" DEFAULT_ART = "https://webamp.org/favicon.ico" +# XDG Standard Paths +XDG_STATE_HOME = os.environ.get("XDG_STATE_HOME", os.path.expanduser("~/.local/state")) +XDG_RUNTIME_DIR = os.environ.get("XDG_RUNTIME_DIR", f"/run/user/{os.getuid()}") + +LOG_DIR = os.path.join(XDG_STATE_HOME, "winamp-mpris") +LOG_FILE = os.path.join(LOG_DIR, "bridge.log") +PID_FILE = os.path.join(XDG_RUNTIME_DIR, "winamp-mpris.pid") + +# Ensure log directory exists +os.makedirs(LOG_DIR, exist_ok=True) + +# Configure Logging +logging.basicConfig( + level=logging.INFO, + format='%(asctime)s [%(levelname)s] %(message)s', + handlers=[ + logging.FileHandler(LOG_FILE), + logging.StreamHandler() + ] +) +logger = logging.getLogger("winamp-mpris") + +def write_pid_file(): + try: + with open(PID_FILE, "w") as f: + f.write(str(os.getpid())) + except Exception as e: + logger.error(f"Failed to write PID file: {e}") + class WinampMPRIS: """ MPRIS2 specification implementation for Winamp Web Interface. @@ -94,16 +125,20 @@ class WinampMPRIS: self._volume = 1.0 def _request(self, endpoint): - print(f"COMMAND RECEIVED: {endpoint}") + logger.info(f"COMMAND RECEIVED: {endpoint}") try: r = requests.get(f"{BASE_URL}/{endpoint}", auth=AUTH, timeout=2) - if r.status_code != 200: + if r.status_code == 401: + msg = "401 Unauthorized: Check gen_httpsrv.dll plugin config. Ensure user 'winamp' has correct password and 'Play' permissions in Users tab." + logger.warning(f"ERROR: {msg}") + subprocess.run(["notify-send", "-u", "critical", "-t", "10000", "Winamp Bridge Auth Error", msg]) + elif r.status_code != 200: msg = f"Failed to send '{endpoint}' to Winamp (Status {r.status_code})." - print(f"ERROR: {msg}") + logger.error(f"ERROR: {msg}") subprocess.run(["notify-send", "-u", "critical", "-t", "3000", "Winamp Bridge Error", msg]) except Exception as e: msg = f"Connection error while sending '{endpoint}': {e}" - print(f"ERROR: {msg}") + logger.warning(f"ERROR: {msg}") subprocess.run(["notify-send", "-u", "critical", "-t", "3000", "Winamp Bridge Offline", msg]) # MPRIS Methods @@ -264,6 +299,7 @@ def update_loop(player): last_known_shuffle = False last_known_loop = "None" offline_logged = False + auth_error_logged = False while True: try: @@ -301,6 +337,7 @@ def update_loop(player): r = requests.get(f"{BASE_URL}/main", auth=AUTH, timeout=1) if r.status_code == 200: offline_logged = False + auth_error_logged = False soup = BeautifulSoup(r.text, 'html.parser') p_tags = soup.find_all('p') status_raw = p_tags[0].text if p_tags else "" @@ -357,10 +394,17 @@ def update_loop(player): player._title = status_raw.split('-')[0].replace("Playing track ", "").strip() player._artist = "Unknown" player._album = "" + elif r.status_code == 401: + if not auth_error_logged: + msg = "401 Unauthorized: Check gen_httpsrv.dll plugin config. Ensure user 'winamp' has correct password and 'Play' permissions in Users tab." + logger.warning(f"ERROR: {msg}") + subprocess.run(["notify-send", "-u", "critical", "-t", "10000", "Winamp Bridge Auth Error", msg]) + auth_error_logged = True + player._status = "Stopped" except requests.exceptions.RequestException: if not window_title: if not offline_logged: - print("Winamp Web Interface offline and no window found.") + logger.info("Winamp Web Interface offline and no window found.") offline_logged = True player._status = "Stopped" @@ -383,7 +427,7 @@ def update_loop(player): last_known_loop = player._loop_status album_str = f" [{player._album}]" if player._album else "" - print(f"UPDATE: [{player._status}] Shuffle: {player._shuffle}, Loop: {player._loop_status}, {player._artist}{album_str} - {player._title}") + logger.info(f"UPDATE: [{player._status}] Shuffle: {player._shuffle}, Loop: {player._loop_status}, {player._artist}{album_str} - {player._title}") player.PropertiesChanged( "org.mpris.MediaPlayer2.Player", @@ -398,12 +442,13 @@ def update_loop(player): ) except Exception as e: - print(f"Update error: {e}") + logger.error(f"Update error: {e}") time.sleep(1) if __name__ == "__main__": + write_pid_file() bus = SessionBus() player_logic = WinampMPRIS() bus.publish(APP_ID, ("/org/mpris/MediaPlayer2", player_logic)) @@ -420,7 +465,7 @@ if __name__ == "__main__": thread = Thread(target=update_loop, args=(player_logic,), daemon=True) thread.start() - print(f"--- Winamp Bridge Started (Window Title + Web UI + Album Art) ---") + logger.info(f"--- Winamp Bridge Started (Window Title + Web UI + Album Art) ---") loop = GLib.MainLoop() try: loop.run()