-
Notifications
You must be signed in to change notification settings - Fork 0
/
request_auto.h
80 lines (80 loc) · 2.44 KB
/
request_auto.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
gen_funcs( login , Login )
gen_funcs( homedir , Homedir )
gen_funcs( readFile , ReadFile )
gen_funcs( readDirectory , ReadDirectory )
gen_funcs( writeDirectory , WriteDirectory )
gen_funcs( writeFile , WriteFile )
std::auto_ptr<Request> Request::readFromSocket(int sock) {
Request_Number_Enum eventNumber;
recvData(sock, eventNumber);
if (!(eventNumber & Request_Identifier))
{
throw InconsistentTypeException();
}
std::auto_ptr<Request> toRet;
switch (eventNumber)
{
case Request_Number_Login:
toRet = std::auto_ptr<Request>(new RequestLogin);
toRet->readFromSock(sock);
break;
case Request_Number_Homedir:
toRet = std::auto_ptr<Request>(new RequestHomedir);
toRet->readFromSock(sock);
break;
case Request_Number_ReadFile:
toRet = std::auto_ptr<Request>(new RequestReadFile);
toRet->readFromSock(sock);
break;
case Request_Number_ReadDirectory:
toRet = std::auto_ptr<Request>(new RequestReadDirectory);
toRet->readFromSock(sock);
break;
case Request_Number_WriteDirectory:
toRet = std::auto_ptr<Request>(new RequestWriteDirectory);
toRet->readFromSock(sock);
break;
case Request_Number_WriteFile:
toRet = std::auto_ptr<Request>(new RequestWriteFile);
toRet->readFromSock(sock);
break;
default:
throw UnknownRequestNumber();
}
return toRet;
}
template<> void deleteStruct(Request_Shared & to_delete) {
deleteStruct(to_delete.timestamp);
deleteStruct(to_delete.remote_ip);
delete [] to_delete.user_name;
}
template<> void deleteStruct(Request_Login & to_delete) {
deleteStruct(to_delete.sharedInfo);
delete [] to_delete.login;
delete [] to_delete.password;
}
template<> void deleteStruct(Request_Homedir & to_delete) {
deleteStruct(to_delete.sharedInfo);
}
template<> void deleteStruct(Request_Read_File & to_delete) {
deleteStruct(to_delete.sharedInfo);
delete [] to_delete.path;
delete [] to_delete.name;
delete [] to_delete.fullName;
}
template<> void deleteStruct(Request_Read_Directory & to_delete) {
deleteStruct(to_delete.sharedInfo);
delete [] to_delete.parentPath;
delete [] to_delete.name;
}
template<> void deleteStruct(Request_Write_Directory & to_delete) {
deleteStruct(to_delete.sharedInfo);
delete [] to_delete.parentPath;
delete [] to_delete.name;
}
template<> void deleteStruct(Request_Write_File & to_delete) {
deleteStruct(to_delete.sharedInfo);
delete [] to_delete.path;
delete [] to_delete.name;
delete [] to_delete.fullName;
}