⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftpsrvr.cxx

📁 mgcp协议源代码。支持多种编码:g711
💻 CXX
📖 第 1 页 / 共 2 页
字号:
  PINDEX i;  for (i = 0; i < len; i++) {    values[i] = tokens[i].AsInteger();    if (values[i] < 0 || values[i] > 255)      break;  }  if (i < 6)     OnSyntaxError(PORT);  else {    PIPSocket * socket = GetSocket();    if (socket == NULL)      OnError(590, PORT, "not available on non-TCP transport.");    else {      remoteHost = PIPSocket::Address((BYTE)values[0],                              (BYTE)values[1], (BYTE)values[2], (BYTE)values[3]);      remotePort = (WORD)(values[4]*256 + values[5]);      if (remotePort < 1024 && remotePort != socket->GetPort()-1)        OnError(590, PORT, "cannot access privileged port number.");      else {        PIPSocket::Address controlHost;        GetSocket()->GetPeerAddress(controlHost);        if (thirdPartyPort || remoteHost == controlHost)          OnCommandSuccessful(PORT);        else          OnError(591, PORT, "three way transfer not allowed.");      }    }  }  return TRUE;}BOOL PFTPServer::OnPASV(const PCaselessString &){  if (passiveSocket != NULL)    delete passiveSocket;  passiveSocket = new PTCPSocket;  passiveSocket->Listen();  WORD portNo = passiveSocket->GetPort();  PIPSocket::Address ourAddr;  PIPSocket * socket = GetSocket();  if (socket != NULL)    socket->GetLocalAddress(ourAddr);  PString str(PString::Printf,              "Entering Passive Mode (%i,%i,%i,%i,%i,%i)",              ourAddr.Byte1(),              ourAddr.Byte2(),              ourAddr.Byte3(),              ourAddr.Byte4(),              portNo/256, portNo%256);  return WriteResponse(227, str);}BOOL PFTPServer::OnTYPE(const PCaselessString & args){  if (args.IsEmpty())    OnSyntaxError(TYPE);  else {    switch (toupper(args[0])) {      case 'A':        type = 'A';        break;      case 'I':        type = 'I';        break;      case 'E':      case 'L':        WriteResponse(504, PString("TYPE not implemented for parameter ") + args);        return TRUE;      default:        OnSyntaxError(TYPE);        return TRUE;    }  }  OnCommandSuccessful(TYPE);  return TRUE;}BOOL PFTPServer::OnMODE(const PCaselessString & args){  if (args.IsEmpty())    OnSyntaxError(MODE);  else {    switch (toupper(args[0])) {      case 'S':        structure = 'S';        break;      case 'B':      case 'C':        WriteResponse(504, PString("MODE not implemented for parameter ") + args);        return TRUE;      default:        OnSyntaxError(MODE);        return TRUE;    }  }  OnCommandSuccessful(MODE);  return TRUE;}BOOL PFTPServer::OnSTRU(const PCaselessString & args){  if (args.IsEmpty())    OnSyntaxError(STRU);  else {    switch (toupper(args[0])) {      case 'F':        structure = 'F';        break;      case 'R':      case 'P':        WriteResponse(504, PString("STRU not implemented for parameter ") + args);        return TRUE;      default:        OnSyntaxError(STRU);        return TRUE;    }  }  OnCommandSuccessful(STRU);  return TRUE;}BOOL PFTPServer::OnNOOP(const PCaselessString &){  OnCommandSuccessful(NOOP);  return TRUE;}// mandatory commands that cannot be performed without logging inBOOL PFTPServer::OnRETR(const PCaselessString &){  OnNotImplemented(RETR);  return TRUE;}BOOL PFTPServer::OnSTOR(const PCaselessString &){  OnNotImplemented(STOR);  return TRUE;}BOOL PFTPServer::OnACCT(const PCaselessString &){  WriteResponse(532, "Need account for storing files");  return TRUE;}BOOL PFTPServer::OnCWD(const PCaselessString &){  OnNotImplemented(CWD);  return TRUE;}BOOL PFTPServer::OnCDUP(const PCaselessString &){  OnNotImplemented(CDUP);  return TRUE;}BOOL PFTPServer::OnSMNT(const PCaselessString &){  OnNotImplemented(SMNT);  return TRUE;}BOOL PFTPServer::OnREIN(const PCaselessString &){  OnNotImplemented(REIN);  return TRUE;}BOOL PFTPServer::OnSTOU(const PCaselessString &){  OnNotImplemented(STOU);  return TRUE;}BOOL PFTPServer::OnAPPE(const PCaselessString &){  OnNotImplemented(APPE);  return TRUE;}BOOL PFTPServer::OnALLO(const PCaselessString &){  OnNotImplemented(ALLO);  return TRUE;}BOOL PFTPServer::OnREST(const PCaselessString &){  OnNotImplemented(REST);  return TRUE;}BOOL PFTPServer::OnRNFR(const PCaselessString &){  OnNotImplemented(RNFR);  return TRUE;}BOOL PFTPServer::OnRNTO(const PCaselessString &){  OnNotImplemented(RNTO);  return TRUE;}BOOL PFTPServer::OnABOR(const PCaselessString &){  OnNotImplemented(ABOR);  return TRUE;}BOOL PFTPServer::OnDELE(const PCaselessString &){  OnNotImplemented(DELE);  return TRUE;}BOOL PFTPServer::OnRMD(const PCaselessString &){  OnNotImplemented(RMD);  return TRUE;}BOOL PFTPServer::OnMKD(const PCaselessString &){  OnNotImplemented(MKD);  return TRUE;}BOOL PFTPServer::OnPWD(const PCaselessString &){  OnNotImplemented(PWD);  return TRUE;}BOOL PFTPServer::OnLIST(const PCaselessString &){  OnNotImplemented(LIST);  return TRUE;}BOOL PFTPServer::OnNLST(const PCaselessString &){  OnNotImplemented(NLST);  return TRUE;}BOOL PFTPServer::OnSITE(const PCaselessString &){  OnNotImplemented(SITE);  return TRUE;}BOOL PFTPServer::OnSYST(const PCaselessString &){  WriteResponse(215, GetSystemTypeString());  return TRUE;}BOOL PFTPServer::OnSTAT(const PCaselessString &){  OnNotImplemented(STATcmd);  return TRUE;}BOOL PFTPServer::OnHELP(const PCaselessString &){  OnNotImplemented(HELP);  return TRUE;}void PFTPServer::SendToClient(const PFilePath & filename){  if (!PFile::Exists(filename))     WriteResponse(450, filename + ": file not found");  else {    PTCPSocket * dataSocket;    if (passiveSocket != NULL) {      dataSocket = new PTCPSocket(*passiveSocket);      delete passiveSocket;      passiveSocket = NULL;    } else      dataSocket = new PTCPSocket(remoteHost, remotePort);    if (!dataSocket->IsOpen())      WriteResponse(425, "Cannot open data connection");    else {      if (type == 'A') {        PTextFile file(filename, PFile::ReadOnly);        if (!file.IsOpen())          WriteResponse(450, filename + ": cannot open file");        else {          PString fileSize(PString::Unsigned, file.GetLength());          WriteResponse(150, PString("Opening ASCII data connection for " + filename.GetFileName() + "(" + fileSize + " bytes)"));          PString line;          BOOL ok = TRUE;          while (ok && file.ReadLine(line)) {            if (!dataSocket->Write((const char *)line, line.GetLength())) {              WriteResponse(426, "Connection closed - transfer aborted");              ok = FALSE;            }          }          file.Close();        }      } else {        PFile file(filename, PFile::ReadOnly);        if (!file.IsOpen())          WriteResponse(450, filename + ": cannot open file");        else {          PString fileSize(PString::Unsigned, file.GetLength());          WriteResponse(150, PString("Opening BINARY data connection for " + filename.GetFileName() + "(" + fileSize + " bytes)"));          BYTE buffer[2048];          BOOL ok = TRUE;          while (ok && file.Read(buffer, 2048)) {            if (!dataSocket->Write(buffer, file.GetLastReadCount())) {              WriteResponse(426, "Connection closed - transfer aborted");              ok = FALSE;            }          }          file.Close();        }      }      delete dataSocket;      WriteResponse(226, "Transfer complete");    }  }}// End of File ///////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -