?? interface.cpp
字號:
#include "interface.h"#include "unistd.h"using namespace std;Interface::Interface() { client = NULL; passive = false;}void Interface::start() { while(true) { cout << "ftp" << (client ? ":"+string(dir) : "") + "> "; string command; getline(cin, command); try { if(command.substr(0, 5)=="open ") { if(client) { client->quit(); delete client; } if(logon(command.substr(5))) { if(client->syst()!=215) continue; if(client->port(rand())!=200) continue; client->pwd(dir); } } else if(command=="close") { if(client) { client->quit(); delete client; client = NULL; } } else if(command=="passive") { passive = !passive; cout << "\t[M] Passive mode " << (passive ? "on" : "off") << endl; } else if(command=="ascii") { if(client) client->type(Tcp::ASCII); } else if(command=="binary") { if(client) client->type(Tcp::IMAGE); } else if(command=="pwd") { if(client) client->pwd(dir); } else if(command.substr(0, 2)=="ls") { if(command.length()==2) { if(client) { if(passive) client->pasv(); client->list(); } } else if(command.length()>3 && command[2]==' ') { if(client) { if(passive) client->pasv(); client->list(command.substr(3)); } } else cerr << "ERROR: Invalid command" << endl; } else if(command.substr(0, 3)=="cd ") { if(client && client->cwd(command.substr(3))==250) dir.cd(command.substr(3)); } else if(command.substr(0, 4)=="get ") { if(client) { if(passive) client->pasv(); client->retr(command.substr(4)); } } else if(command.substr(0, 4)=="put ") { if(client) if(command.substr(4, 6)=="ftp://") { // transfer between servers unsigned int slash = command.find('/', 10); Client* receiver = client; if(!logon(command.substr(10, slash-10))) continue; if(receiver->connect(client)) receiver->transfer(client, command.substr(slash)); client->quit(); delete client; client = receiver; } else { if(passive) client->pasv(); client->stor(command.substr(4)); } } else if(command.substr(0, 7)=="append ") { if(client) { if(passive) client->pasv(); client->appe(command.substr(7)); } } else if(command.substr(0, 4)=="help") { if(command.length()==4) { if(client) client->help(); } else if(command.length()>5 && command[4]==' ') { if(client) client->help(command.substr(5)); } else cerr << "ERROR: Invalid command" << endl; } else if(command=="quit") { if(client) { client->quit(); delete client; } return; } else cerr << "ERROR: Invalid command" << endl; } catch(const char* message) { cerr << "ERROR: " << message << endl; } }}bool Interface::logon(const string& url) { unsigned int colon = url.find(':'); if(colon==string::npos) client = new Client(url); else client = new Client(url.substr(0, colon), atoi(url.substr(colon+1).c_str())); cout << "Username: "; string username; getline(cin, username); int reply = username.length() ? client->user(username): client->user(); if(reply==331) reply = client->pass(getpass("Password: ")); if(reply==230) return true; else { delete client; client = NULL; return false; }}int main() { Interface interface; interface.start(); return 0;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -