00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <ISocketHandler.h>
00023 #include "OutSocket.h"
00024 #include "InSocket.h"
00025
00026
00027
00028
00029 InSocket::InSocket(ISocketHandler& h)
00030 :TcpSocket(h, 32000, 32000)
00031 ,tmpl(0)
00032 {
00033 }
00034
00035
00036 InSocket::~InSocket()
00037 {
00038 }
00039
00040
00041 void InSocket::OnAccept()
00042 {
00043 printf(" *** Remote Address: '%s'\n",GetRemoteHostname().c_str());
00044 m_remote = new OutSocket(Handler());
00045
00046 m_remote -> Open("127.0.0.1",80);
00047 m_remote -> SetDeleteByHandler();
00048 m_remote -> SetRemote(this);
00049
00050 Handler().Add(m_remote);
00051 }
00052
00053
00054 void InSocket::OnDelete()
00055 {
00056 if (Handler().Valid(m_remote))
00057 {
00058 m_remote -> SetCloseAndDelete();
00059 }
00060 }
00061
00062
00063 void InSocket::OnRawData(const char *p,size_t l)
00064 {
00065 if (Handler().Valid(m_remote) && m_remote -> Ready())
00066 {
00067 if (tmpl)
00068 {
00069 m_remote -> SendBuf(tmps, tmpl);
00070 tmpl = 0;
00071 }
00072 m_remote -> SendBuf(p, l);
00073 }
00074 else
00075 {
00076 Handler().LogError(this, "OnRawData", 0, "m_remote not ready");
00077 memcpy(tmps + tmpl, p, l);
00078 tmpl += l;
00079 }
00080 }
00081
00082