sources/network/rconsession.cpp

Thu, 28 Jan 2021 11:37:36 +0200

author
Teemu Piippo <teemu@hecknology.net>
date
Thu, 28 Jan 2021 11:37:36 +0200
branch
protocol5
changeset 197
819fdef70d68
parent 195
be953e1621d9
child 199
927f4b8ef6f7
permissions
-rw-r--r--

merged with default

73
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
1 /*
190
90bf9049e5eb updated copyright year
Teemu Piippo <teemu@hecknology.net>
parents: 189
diff changeset
2 Copyright 2014 - 2021 Teemu Piippo
73
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
3 All rights reserved.
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
4
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
5 Redistribution and use in source and binary forms, with or without
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
6 modification, are permitted provided that the following conditions
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
7 are met:
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
8
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
9 1. Redistributions of source code must retain the above copyright
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
10 notice, this list of conditions and the following disclaimer.
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
11 2. Redistributions in binary form must reproduce the above copyright
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
12 notice, this list of conditions and the following disclaimer in the
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
13 documentation and/or other materials provided with the distribution.
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
14 3. Neither the name of the copyright holder nor the names of its
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
15 contributors may be used to endorse or promote products derived from
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
16 this software without specific prior written permission.
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
17
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
18 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
19 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
20 TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
21 PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
22 OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
23 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
24 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
25 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
26 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
27 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
28 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
29 */
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
30
81
a18aaf460648 Allow compilation on Windows/MinGW
Teemu Piippo <crimsondusk64@gmail.com>
parents: 73
diff changeset
31 #include <time.h>
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
32 #include "rconsession.h"
23
f7221183a994 - the prompt is now colored
Teemu Piippo <crimsondusk64@gmail.com>
parents: 22
diff changeset
33 #include "../interface.h"
182
20ca0a6be175 removed the String class in favor of std::string
Teemu Piippo <teemu@hecknology.net>
parents: 180
diff changeset
34 #include "../md5.h"
88
08ccaf26cffd Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents: 83
diff changeset
35 BEGIN_ZFC_NAMESPACE
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
36
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
37 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
38 //
92
39947c46ed17 Suppress more MSVC warnings
Teemu Piippo <tsapii@utu.fi>
parents: 88
diff changeset
39 RCONSession::RCONSession() :
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
40 m_state(RCON_DISCONNECTED),
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
41 m_lastPing(0),
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
42 m_adminCount(0),
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
43 m_interface(nullptr)
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
44 {
189
248d0b85cbda various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents: 186
diff changeset
45 std::stringstream errors;
248d0b85cbda various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents: 186
diff changeset
46 if (not m_socket.set_blocking(false, errors))
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
47 {
189
248d0b85cbda various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents: 186
diff changeset
48 fprintf(stderr, "unable to set socket as non-blocking: %s\n", errors.str().data());
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
49 exit(EXIT_FAILURE);
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
50 }
24
e651d02802c0 - the interface is now able to connect to arbitrary hosts (uses ^N to start the prompt) instead of the hardcoded localhost:10666
Teemu Piippo <crimsondusk64@gmail.com>
parents: 23
diff changeset
51 }
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
52
24
e651d02802c0 - the interface is now able to connect to arbitrary hosts (uses ^N to start the prompt) instead of the hardcoded localhost:10666
Teemu Piippo <crimsondusk64@gmail.com>
parents: 23
diff changeset
53 // -------------------------------------------------------------------------------------------------
e651d02802c0 - the interface is now able to connect to arbitrary hosts (uses ^N to start the prompt) instead of the hardcoded localhost:10666
Teemu Piippo <crimsondusk64@gmail.com>
parents: 23
diff changeset
54 //
58
d175243ad169 - rcon sessions are no longer allocated on the heap
Teemu Piippo <crimsondusk64@gmail.com>
parents: 57
diff changeset
55 RCONSession::~RCONSession() {}
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
56
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
57 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
58 //
186
9330b93d9946 cleanup ip address code
Teemu Piippo <teemu@hecknology.net>
parents: 185
diff changeset
59 void RCONSession::connect(net::ip_address address)
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
60 {
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
61 m_address = address;
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
62 m_state = RCON_CONNECTING;
138
c909c38ca886 Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents: 137
diff changeset
63 m_interface->updateStatusBar();
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
64 sendHello();
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
65 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
66
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
67 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
68 //
72
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
69 void RCONSession::disconnect()
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
70 {
27
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
71 if (m_state > RCON_CONNECTING)
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
72 {
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
73 // Say goodbye to remote
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
74 send({CLRC_DISCONNECT});
111
51c93a0cc317 Now disconnects properly without instantly quitting
Teemu Piippo <crimsondusk64@gmail.com>
parents: 109
diff changeset
75 m_interface->disconnected();
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
76 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
77
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
78 m_state = RCON_DISCONNECTED;
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
79 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
80
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
81 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
82 //
191
2e6cbacafdc7 various little touchups
Teemu Piippo <teemu@hecknology.net>
parents: 190
diff changeset
83 bool RCONSession::send(const std::vector<unsigned char>& packet)
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
84 {
189
248d0b85cbda various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents: 186
diff changeset
85 std::stringstream errors;
248d0b85cbda various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents: 186
diff changeset
86 const bool result = m_socket.send(m_address, packet, errors);
248d0b85cbda various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents: 186
diff changeset
87 if (not result)
248d0b85cbda various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents: 186
diff changeset
88 {
248d0b85cbda various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents: 186
diff changeset
89 this->m_interface->printError("Network error: %s\n", errors.str().data());
248d0b85cbda various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents: 186
diff changeset
90 }
248d0b85cbda various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents: 186
diff changeset
91 return result;
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
92 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
93
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
94 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
95 //
72
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
96 void RCONSession::tick()
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
97 {
31
b5b5a6a96d91 - added input history (use up/down to navigate)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 29
diff changeset
98 if (m_state == RCON_DISCONNECTED)
b5b5a6a96d91 - added input history (use up/down to navigate)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 29
diff changeset
99 return;
b5b5a6a96d91 - added input history (use up/down to navigate)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 29
diff changeset
100
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
101 time_t now;
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
102 time(&now);
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
103
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
104 if (m_lastPing < now)
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
105 {
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
106 if (m_state == RCON_CONNECTING)
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
107 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
108 sendHello();
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
109 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
110 else if (m_state == RCON_AUTHENTICATING)
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
111 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
112 sendPassword();
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
113 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
114 else if (m_state == RCON_CONNECTED and m_lastPing + 5 < now)
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
115 {
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
116 send({CLRC_PONG});
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
117 bumpLastPing();
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
118 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
119 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
120
167
0150f86e68f0 Added the PacketQueue class to make use of the sequence numbering to process packets in the correct order, and the ZFC9000 end of packet recovery protocol.
Teemu Piippo <teemu@compsta2.com>
parents: 166
diff changeset
121 // Check for new packets in our socket
189
248d0b85cbda various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents: 186
diff changeset
122 std::stringstream errors;
248d0b85cbda various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents: 186
diff changeset
123 for (net::Datagram datagram; m_socket.read(datagram, errors);)
168
96ffd13c08a2 Reduce delta to protocol5 branch by importing the change to RCONSessoin::handlePacket's signature
Teemu Piippo <teemu@compsta2.com>
parents: 163
diff changeset
124 {
189
248d0b85cbda various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents: 186
diff changeset
125 if (errors.tellp() > 0)
248d0b85cbda various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents: 186
diff changeset
126 {
248d0b85cbda various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents: 186
diff changeset
127 m_interface->printError("Network error: %s\n", errors.str().data());
248d0b85cbda various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents: 186
diff changeset
128 errors = {};
248d0b85cbda various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents: 186
diff changeset
129 }
168
96ffd13c08a2 Reduce delta to protocol5 branch by importing the change to RCONSessoin::handlePacket's signature
Teemu Piippo <teemu@compsta2.com>
parents: 163
diff changeset
130 // Only process packets that originate from the game server.
96ffd13c08a2 Reduce delta to protocol5 branch by importing the change to RCONSessoin::handlePacket's signature
Teemu Piippo <teemu@compsta2.com>
parents: 163
diff changeset
131 if (datagram.address == m_address)
96ffd13c08a2 Reduce delta to protocol5 branch by importing the change to RCONSessoin::handlePacket's signature
Teemu Piippo <teemu@compsta2.com>
parents: 163
diff changeset
132 handlePacket(datagram.message);
96ffd13c08a2 Reduce delta to protocol5 branch by importing the change to RCONSessoin::handlePacket's signature
Teemu Piippo <teemu@compsta2.com>
parents: 163
diff changeset
133 }
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
134 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
135
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
136 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
137 //
191
2e6cbacafdc7 various little touchups
Teemu Piippo <teemu@hecknology.net>
parents: 190
diff changeset
138 void RCONSession::handlePacket(std::vector<unsigned char>& message)
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
139 {
168
96ffd13c08a2 Reduce delta to protocol5 branch by importing the change to RCONSessoin::handlePacket's signature
Teemu Piippo <teemu@compsta2.com>
parents: 163
diff changeset
140 Bytestream stream(message);
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
141
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
142 try
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
143 {
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
144 while (stream.bytesLeft() > 0)
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
145 {
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
146 int header = stream.readByte();
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
147
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
148 switch (ServerResponse(header))
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
149 {
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
150 case SVRC_OLDPROTOCOL:
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
151 m_interface->printError("Your RCON client is using outdated protocol.\n");
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
152 m_state = RCON_DISCONNECTED;
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
153 break;
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
154
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
155 case SVRC_BANNED:
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
156 m_interface->printError("You have been banned from the server.\n");
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
157 m_state = RCON_DISCONNECTED;
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
158 break;
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
159
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
160 case SVRC_SALT:
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
161 m_salt = stream.readString();
32
ee770597a281 - added support for in-game colors
Teemu Piippo <crimsondusk64@gmail.com>
parents: 31
diff changeset
162 m_state = RCON_AUTHENTICATING;
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
163 sendPassword();
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
164 break;
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
165
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
166 case SVRC_INVALIDPASSWORD:
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
167 m_interface->printError("Login failed.\n");
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
168 m_state = RCON_DISCONNECTED;
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
169 break;
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
170
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
171 case SVRC_MESSAGE:
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
172 {
183
9b6a0daedfc0 renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents: 182
diff changeset
173 std::string message = stream.readString();
182
20ca0a6be175 removed the String class in favor of std::string
Teemu Piippo <teemu@hecknology.net>
parents: 180
diff changeset
174 normalize(message);
20ca0a6be175 removed the String class in favor of std::string
Teemu Piippo <teemu@hecknology.net>
parents: 180
diff changeset
175 m_interface->printText("%s\n", message.data());
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
176 }
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
177 break;
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
178
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
179 case SVRC_LOGGEDIN:
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
180 m_interface->print("Login successful!\n");
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
181 m_serverProtocol = stream.readByte();
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
182 m_hostname = stream.readString();
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
183 m_interface->setTitle(m_hostname);
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
184 m_state = RCON_CONNECTED;
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
185
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
186 for (int i = stream.readByte(); i > 0; --i)
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
187 processServerUpdates(stream);
12
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
188
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
189 m_interface->print("Previous messages:\n");
31
b5b5a6a96d91 - added input history (use up/down to navigate)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 29
diff changeset
190
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
191 for (int i = stream.readByte(); i > 0; --i)
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
192 {
183
9b6a0daedfc0 renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents: 182
diff changeset
193 std::string message = stream.readString();
182
20ca0a6be175 removed the String class in favor of std::string
Teemu Piippo <teemu@hecknology.net>
parents: 180
diff changeset
194 normalize(message);
20ca0a6be175 removed the String class in favor of std::string
Teemu Piippo <teemu@hecknology.net>
parents: 180
diff changeset
195 m_interface->printText("--- %s\n", message.data());
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
196 }
31
b5b5a6a96d91 - added input history (use up/down to navigate)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 29
diff changeset
197
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
198 m_interface->print("End of previous messages.\n");
104
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
199
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
200 // Watch sv_hostname so that we can update the titlebar when it changes.
160
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
201 requestWatch("sv_hostname");
130
9f54db6f9922 Commit ZFC's end of reliable RCON streams
Teemu Piippo <crimsondusk64@gmail.com>
parents: 106
diff changeset
202 m_interface->print ("Watch requested.\n");
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
203 break;
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
204
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
205 case SVRC_UPDATE:
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
206 processServerUpdates(stream);
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
207 break;
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
208
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
209 case SVRC_TOOMANYTABCOMPLETES:
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
210 {
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
211 unsigned int numCompletions = stream.readShort();
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
212 m_interface->print("%d completions for '%s'.\n",
182
20ca0a6be175 removed the String class in favor of std::string
Teemu Piippo <teemu@hecknology.net>
parents: 180
diff changeset
213 int(numCompletions), m_lastTabComplete.data());
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
214 }
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
215 break;
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
216
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
217 case SVRC_TABCOMPLETE:
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
218 {
183
9b6a0daedfc0 renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents: 182
diff changeset
219 std::vector<std::string> completes;
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
220 completes.resize(stream.readByte());
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
221
183
9b6a0daedfc0 renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents: 182
diff changeset
222 for (std::string& completion : completes)
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
223 completion = stream.readString();
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
224
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
225 if (completes.size() == 1)
72
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
226 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
227 m_interface->tabComplete(m_lastTabComplete, completes[0]);
72
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
228 }
179
7fc34735178e start cleaning up unused code
Teemu Piippo <teemu@hecknology.net>
parents: 168
diff changeset
229 else if (completes.size() > 0)
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
230 {
182
20ca0a6be175 removed the String class in favor of std::string
Teemu Piippo <teemu@hecknology.net>
parents: 180
diff changeset
231 m_interface->print("Completions for '%s':\n", m_lastTabComplete.data());
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
232
185
e83ec58cc458 removed the Range class too
Teemu Piippo <teemu@hecknology.net>
parents: 183
diff changeset
233 for (std::size_t i = 0; i < completes.size(); i += 8)
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
234 {
185
e83ec58cc458 removed the Range class too
Teemu Piippo <teemu@hecknology.net>
parents: 183
diff changeset
235 const int end = min(i + 8, completes.size());
183
9b6a0daedfc0 renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents: 182
diff changeset
236 std::vector<std::string> splices = splice(completes, i, end);
182
20ca0a6be175 removed the String class in favor of std::string
Teemu Piippo <teemu@hecknology.net>
parents: 180
diff changeset
237 m_interface->print("- %s\n", join_string_list(splices, ", ").data());
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
238 }
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
239 }
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
240 }
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
241 break;
103
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
242
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
243 case SVRC_WATCHINGCVAR:
195
be953e1621d9 merged with default
Teemu Piippo <teemu@hecknology.net>
parents: 176 191
diff changeset
244 m_interface->print ("You are now watching %s\n", stream.readString().data());
be953e1621d9 merged with default
Teemu Piippo <teemu@hecknology.net>
parents: 176 191
diff changeset
245 m_interface->print ("Its value is: %s\n", stream.readString().data());
103
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
246 break;
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
247
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
248 case SVRC_ALREADYWATCHINGCVAR:
195
be953e1621d9 merged with default
Teemu Piippo <teemu@hecknology.net>
parents: 176 191
diff changeset
249 m_interface->print ("You are already watching %s\n", stream.readString().data());
103
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
250 break;
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
251
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
252 case SVRC_WATCHCVARNOTFOUND:
195
be953e1621d9 merged with default
Teemu Piippo <teemu@hecknology.net>
parents: 176 191
diff changeset
253 m_interface->print ("CVar %s not found\n", stream.readString().data());
103
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
254 break;
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
255
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
256 case SVRC_CVARCHANGED:
104
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
257 {
160
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
258 String name = stream.readString();
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
259 String value = stream.readString();
195
be953e1621d9 merged with default
Teemu Piippo <teemu@hecknology.net>
parents: 176 191
diff changeset
260 m_interface->print ("The value of CVar %s", name.data());
be953e1621d9 merged with default
Teemu Piippo <teemu@hecknology.net>
parents: 176 191
diff changeset
261 m_interface->print (" is now %s\n", value.data());
104
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
262
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
263 // If sv_hostname changes, update the titlebar
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
264 if (name == "sv_hostname")
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
265 {
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
266 m_hostname = value;
151
267ef11bd3ba Fixed complation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 150
diff changeset
267 m_interface->setTitle(m_hostname);
104
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
268 }
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
269 }
103
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
270 break;
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
271
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
272 case SVRC_YOUREDISCONNECTED:
195
be953e1621d9 merged with default
Teemu Piippo <teemu@hecknology.net>
parents: 176 191
diff changeset
273 m_interface->print ("You have been disconnected: %s\n", stream.readString().data());
103
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
274 m_interface->disconnected();
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
275 break;
12
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
276 }
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
277 }
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
278 }
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
279 catch (std::exception& e)
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
280 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
281 m_interface->printWarning("Couldn't process packet: %s\n", e.what());
182
20ca0a6be175 removed the String class in favor of std::string
Teemu Piippo <teemu@hecknology.net>
parents: 180
diff changeset
282 m_interface->printWarning("Packet contents was: %s\n", quote(message).data());
163
5948441a1951 Added the ByteArray::quote() method to return a string representation of the byte array, and used it to print out the contents of unparseable packets.
Teemu Piippo <teemu@compsta2.com>
parents: 158
diff changeset
283 m_interface->printWarning("Stream position in payload was: %d\n", stream.position());
12
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
284 }
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
285 }
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
286
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
287 void RCONSession::processServerUpdates(Bytestream& packet)
12
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
288 {
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
289 int header = packet.readByte();
70
0e947b487b18 Yay colors
Teemu Piippo <crimsondusk64@gmail.com>
parents: 58
diff changeset
290
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
291 switch (RCONUpdateType(header))
12
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
292 {
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
293 case SVRCU_PLAYERDATA:
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
294 {
183
9b6a0daedfc0 renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents: 182
diff changeset
295 std::vector<std::string> players;
47
35b968619b0c - added a nicklist!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 32
diff changeset
296
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
297 for (int i = packet.readByte(); i > 0; --i)
179
7fc34735178e start cleaning up unused code
Teemu Piippo <teemu@hecknology.net>
parents: 168
diff changeset
298 players.push_back(packet.readString());
47
35b968619b0c - added a nicklist!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 32
diff changeset
299
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
300 m_interface->setPlayerNames(players);
12
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
301 }
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
302 break;
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
303
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
304 case SVRCU_ADMINCOUNT:
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
305 m_adminCount = packet.readByte();
138
c909c38ca886 Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents: 137
diff changeset
306 m_interface->updateStatusBar();
12
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
307 break;
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
308
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
309 case SVRCU_MAP:
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
310 m_level = packet.readString();
138
c909c38ca886 Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents: 137
diff changeset
311 m_interface->updateStatusBar();
12
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
312 break;
70
0e947b487b18 Yay colors
Teemu Piippo <crimsondusk64@gmail.com>
parents: 58
diff changeset
313
0e947b487b18 Yay colors
Teemu Piippo <crimsondusk64@gmail.com>
parents: 58
diff changeset
314 default:
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
315 m_interface->printWarning("Unknown server update type: %d\n", header);
70
0e947b487b18 Yay colors
Teemu Piippo <crimsondusk64@gmail.com>
parents: 58
diff changeset
316 break;
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
317 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
318 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
319
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
320 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
321 //
189
248d0b85cbda various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents: 186
diff changeset
322 net::UDPSocket* RCONSession::getSocket()
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
323 {
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
324 return &m_socket;
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
325 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
326
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
327 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
328 //
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
329 void RCONSession::sendHello()
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
330 {
186
9330b93d9946 cleanup ip address code
Teemu Piippo <teemu@hecknology.net>
parents: 185
diff changeset
331 m_interface->print("Connecting to %s...\n", net::ip_address_to_string(m_address).data());
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
332 send({CLRC_BEGINCONNECTION, RCON_PROTOCOL_VERSION});
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
333 bumpLastPing();
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
334 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
335
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
336 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
337 //
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
338 void RCONSession::sendPassword()
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
339 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
340 m_interface->print("Authenticating...\n");
191
2e6cbacafdc7 various little touchups
Teemu Piippo <teemu@hecknology.net>
parents: 190
diff changeset
341 std::vector<unsigned char> message;
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
342 Bytestream stream(message);
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
343 stream.writeByte(CLRC_PASSWORD);
182
20ca0a6be175 removed the String class in favor of std::string
Teemu Piippo <teemu@hecknology.net>
parents: 180
diff changeset
344 stream.writeString(md5((m_salt + m_password).data()));
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
345 send(message);
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
346 bumpLastPing();
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
347 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
348
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
349 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
350 //
183
9b6a0daedfc0 renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents: 182
diff changeset
351 void RCONSession::setPassword(const std::string& password)
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
352 {
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
353 m_password = password;
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
354 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
355
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
356 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
357 //
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
358 void RCONSession::bumpLastPing()
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
359 {
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
360 time_t now;
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
361 time(&now);
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
362 m_lastPing = now;
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
363 }
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 13
diff changeset
364
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 13
diff changeset
365 // -------------------------------------------------------------------------------------------------
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 13
diff changeset
366 //
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
367 bool RCONSession::isActive() const
31
b5b5a6a96d91 - added input history (use up/down to navigate)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 29
diff changeset
368 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
369 return getState() != RCON_DISCONNECTED;
31
b5b5a6a96d91 - added input history (use up/down to navigate)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 29
diff changeset
370 }
b5b5a6a96d91 - added input history (use up/down to navigate)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 29
diff changeset
371
b5b5a6a96d91 - added input history (use up/down to navigate)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 29
diff changeset
372 // -------------------------------------------------------------------------------------------------
17
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
373 // Returns true if the message was successfully sent.
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
374 //
183
9b6a0daedfc0 renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents: 182
diff changeset
375 bool RCONSession::sendCommand(const std::string& commandString)
17
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
376 {
182
20ca0a6be175 removed the String class in favor of std::string
Teemu Piippo <teemu@hecknology.net>
parents: 180
diff changeset
377 if (m_state != RCON_CONNECTED or commandString.empty())
17
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
378 return false;
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
379
191
2e6cbacafdc7 various little touchups
Teemu Piippo <teemu@hecknology.net>
parents: 190
diff changeset
380 std::vector<unsigned char> message;
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
381 Bytestream stream(message);
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
382 stream.writeByte(CLRC_COMMAND);
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
383 stream.writeString(commandString);
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
384 send(message);
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
385 bumpLastPing();
17
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
386 return true;
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
387 }
24
e651d02802c0 - the interface is now able to connect to arbitrary hosts (uses ^N to start the prompt) instead of the hardcoded localhost:10666
Teemu Piippo <crimsondusk64@gmail.com>
parents: 23
diff changeset
388
e651d02802c0 - the interface is now able to connect to arbitrary hosts (uses ^N to start the prompt) instead of the hardcoded localhost:10666
Teemu Piippo <crimsondusk64@gmail.com>
parents: 23
diff changeset
389 // -------------------------------------------------------------------------------------------------
e651d02802c0 - the interface is now able to connect to arbitrary hosts (uses ^N to start the prompt) instead of the hardcoded localhost:10666
Teemu Piippo <crimsondusk64@gmail.com>
parents: 23
diff changeset
390 //
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
391 RCONSessionState RCONSession::getState() const
24
e651d02802c0 - the interface is now able to connect to arbitrary hosts (uses ^N to start the prompt) instead of the hardcoded localhost:10666
Teemu Piippo <crimsondusk64@gmail.com>
parents: 23
diff changeset
392 {
e651d02802c0 - the interface is now able to connect to arbitrary hosts (uses ^N to start the prompt) instead of the hardcoded localhost:10666
Teemu Piippo <crimsondusk64@gmail.com>
parents: 23
diff changeset
393 return m_state;
e651d02802c0 - the interface is now able to connect to arbitrary hosts (uses ^N to start the prompt) instead of the hardcoded localhost:10666
Teemu Piippo <crimsondusk64@gmail.com>
parents: 23
diff changeset
394 }
27
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
395
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
396 // -------------------------------------------------------------------------------------------------
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
397 //
186
9330b93d9946 cleanup ip address code
Teemu Piippo <teemu@hecknology.net>
parents: 185
diff changeset
398 const net::ip_address& RCONSession::address() const
27
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
399 {
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
400 return m_address;
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
401 }
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
402
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
403 // -------------------------------------------------------------------------------------------------
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
404 //
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
405 int RCONSession::getAdminCount() const
27
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
406 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
407 return m_adminCount;
27
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
408 }
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
409
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
410 // -------------------------------------------------------------------------------------------------
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
411 //
183
9b6a0daedfc0 renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents: 182
diff changeset
412 const std::string& RCONSession::getLevel() const
27
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
413 {
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
414 return m_level;
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
415 }
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
416
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
417 // -------------------------------------------------------------------------------------------------
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
418 //
183
9b6a0daedfc0 renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents: 182
diff changeset
419 void RCONSession::requestTabCompletion(const std::string& part)
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
420 {
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
421 if (m_serverProtocol >= 4)
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
422 {
191
2e6cbacafdc7 various little touchups
Teemu Piippo <teemu@hecknology.net>
parents: 190
diff changeset
423 std::vector<unsigned char> message;
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
424 Bytestream stream(message);
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
425 stream.writeByte(CLRC_TABCOMPLETE);
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
426 stream.writeString(part);
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
427 send(message);
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
428 bumpLastPing();
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
429 m_lastTabComplete = part;
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
430 }
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
431 else
83
08bfc3d9d2ae Removed format.cpp and format.h, use built-in formatting instead
Teemu Piippo <crimsondusk64@gmail.com>
parents: 81
diff changeset
432 {
189
248d0b85cbda various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents: 186
diff changeset
433 m_interface->print("This server does not support tab-completion\n");
83
08bfc3d9d2ae Removed format.cpp and format.h, use built-in formatting instead
Teemu Piippo <crimsondusk64@gmail.com>
parents: 81
diff changeset
434 }
88
08ccaf26cffd Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents: 83
diff changeset
435 }
08ccaf26cffd Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents: 83
diff changeset
436
92
39947c46ed17 Suppress more MSVC warnings
Teemu Piippo <tsapii@utu.fi>
parents: 88
diff changeset
437 // -------------------------------------------------------------------------------------------------
39947c46ed17 Suppress more MSVC warnings
Teemu Piippo <tsapii@utu.fi>
parents: 88
diff changeset
438 //
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
439 void RCONSession::setInterface(Interface* interface)
92
39947c46ed17 Suppress more MSVC warnings
Teemu Piippo <tsapii@utu.fi>
parents: 88
diff changeset
440 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
441 m_interface = interface;
92
39947c46ed17 Suppress more MSVC warnings
Teemu Piippo <tsapii@utu.fi>
parents: 88
diff changeset
442 }
39947c46ed17 Suppress more MSVC warnings
Teemu Piippo <tsapii@utu.fi>
parents: 88
diff changeset
443
106
7b156b764d11 Merged with default
Teemu Piippo <crimsondusk64@gmail.com>
parents: 104 105
diff changeset
444 // -------------------------------------------------------------------------------------------------
7b156b764d11 Merged with default
Teemu Piippo <crimsondusk64@gmail.com>
parents: 104 105
diff changeset
445 //
160
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
446 void RCONSession::requestWatch(const String& cvar)
104
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
447 {
195
be953e1621d9 merged with default
Teemu Piippo <teemu@hecknology.net>
parents: 176 191
diff changeset
448 const std::vector<std::string> cvars{{cvar}};
160
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
449 requestWatch(cvars);
104
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
450 }
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
451
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
452 // -------------------------------------------------------------------------------------------------
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
453 //
195
be953e1621d9 merged with default
Teemu Piippo <teemu@hecknology.net>
parents: 176 191
diff changeset
454 void RCONSession::requestWatch(const std::vector<std::string>& cvars)
104
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
455 {
195
be953e1621d9 merged with default
Teemu Piippo <teemu@hecknology.net>
parents: 176 191
diff changeset
456 std::vector<unsigned char> message;
160
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
457 Bytestream stream(message);
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
458 stream.writeByte(CLRC_WATCHCVAR);
195
be953e1621d9 merged with default
Teemu Piippo <teemu@hecknology.net>
parents: 176 191
diff changeset
459 for (String cvar : cvars)
be953e1621d9 merged with default
Teemu Piippo <teemu@hecknology.net>
parents: 176 191
diff changeset
460 {
be953e1621d9 merged with default
Teemu Piippo <teemu@hecknology.net>
parents: 176 191
diff changeset
461 normalize(cvar);
be953e1621d9 merged with default
Teemu Piippo <teemu@hecknology.net>
parents: 176 191
diff changeset
462 stream.writeString(cvar);
be953e1621d9 merged with default
Teemu Piippo <teemu@hecknology.net>
parents: 176 191
diff changeset
463 }
160
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
464 stream.writeString("");
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
465 send(message);
104
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
466 }
106
7b156b764d11 Merged with default
Teemu Piippo <crimsondusk64@gmail.com>
parents: 104 105
diff changeset
467
105
b4466472aecd Added some basic IRC-like commands that can be used to do what keystrokes can do without actually using keystrokes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 96
diff changeset
468 END_ZFC_NAMESPACE

mercurial