Fri, 24 Jul 2015 04:24:38 +0300
Apply Leonard's patch for fixing the colors:
The colors were broken again.
* isprint for some reason returned true when the given byte is higher than 255.
The char cast of the byte was then printed which resulted in odd characters
popping up. Black appeared as ^@ which is NULL in caret notation.
* After that, the colors were all messed up because the RLINE enum didn't take
in account the color swapping.
So instead of messing up the enum order/number I went for a new "range-like"
method.
* After fixing all of that, I noticed the Interface::render_colorline had a
broken loop since the VS2010 commits.
This made the lines not print entierely and messed up the colors etc.
9
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
1 | /* |
73
07dda51a7a8e
Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
24
diff
changeset
|
2 | Copyright 2014, 2015 Teemu Piippo |
9
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
3 | All rights reserved. |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
4 | |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
5 | Redistribution and use in source and binary forms, with or without |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
6 | modification, are permitted provided that the following conditions |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
7 | are met: |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
8 | |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
9 | 1. Redistributions of source code must retain the above copyright |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
10 | notice, this list of conditions and the following disclaimer. |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
11 | 2. Redistributions in binary form must reproduce the above copyright |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
12 | notice, this list of conditions and the following disclaimer in the |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
13 | documentation and/or other materials provided with the distribution. |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
14 | 3. Neither the name of the copyright holder nor the names of its |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
15 | contributors may be used to endorse or promote products derived from |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
16 | this software without specific prior written permission. |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
17 | |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
19 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
20 | TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
21 | PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
22 | OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
23 | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
24 | PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
25 | PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
26 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
27 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
28 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
29 | */ |
e7a09ceb4505
- now with more license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents:
8
diff
changeset
|
30 | |
81
a18aaf460648
Allow compilation on Windows/MinGW
Teemu Piippo <crimsondusk64@gmail.com>
parents:
73
diff
changeset
|
31 | #include "ipaddress.h" |
a18aaf460648
Allow compilation on Windows/MinGW
Teemu Piippo <crimsondusk64@gmail.com>
parents:
73
diff
changeset
|
32 | |
a18aaf460648
Allow compilation on Windows/MinGW
Teemu Piippo <crimsondusk64@gmail.com>
parents:
73
diff
changeset
|
33 | #ifndef _WIN32 |
a18aaf460648
Allow compilation on Windows/MinGW
Teemu Piippo <crimsondusk64@gmail.com>
parents:
73
diff
changeset
|
34 | # include <netinet/in.h> |
a18aaf460648
Allow compilation on Windows/MinGW
Teemu Piippo <crimsondusk64@gmail.com>
parents:
73
diff
changeset
|
35 | # include <netdb.h> |
a18aaf460648
Allow compilation on Windows/MinGW
Teemu Piippo <crimsondusk64@gmail.com>
parents:
73
diff
changeset
|
36 | #else |
a18aaf460648
Allow compilation on Windows/MinGW
Teemu Piippo <crimsondusk64@gmail.com>
parents:
73
diff
changeset
|
37 | # include <winsock2.h> |
a18aaf460648
Allow compilation on Windows/MinGW
Teemu Piippo <crimsondusk64@gmail.com>
parents:
73
diff
changeset
|
38 | # include <ws2tcpip.h> |
a18aaf460648
Allow compilation on Windows/MinGW
Teemu Piippo <crimsondusk64@gmail.com>
parents:
73
diff
changeset
|
39 | #endif |
a18aaf460648
Allow compilation on Windows/MinGW
Teemu Piippo <crimsondusk64@gmail.com>
parents:
73
diff
changeset
|
40 | |
88
08ccaf26cffd
Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents:
81
diff
changeset
|
41 | BEGIN_ZFC_NAMESPACE |
81
a18aaf460648
Allow compilation on Windows/MinGW
Teemu Piippo <crimsondusk64@gmail.com>
parents:
73
diff
changeset
|
42 | |
a18aaf460648
Allow compilation on Windows/MinGW
Teemu Piippo <crimsondusk64@gmail.com>
parents:
73
diff
changeset
|
43 | #ifdef _WIN32 |
88
08ccaf26cffd
Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents:
81
diff
changeset
|
44 | typedef ADDRINFOA AddrInfo; |
81
a18aaf460648
Allow compilation on Windows/MinGW
Teemu Piippo <crimsondusk64@gmail.com>
parents:
73
diff
changeset
|
45 | #else |
88
08ccaf26cffd
Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents:
81
diff
changeset
|
46 | typedef struct addrinfo AddrInfo; |
81
a18aaf460648
Allow compilation on Windows/MinGW
Teemu Piippo <crimsondusk64@gmail.com>
parents:
73
diff
changeset
|
47 | #endif |
5 | 48 | |
49 | // ----------------------------------------------------------------------------- | |
50 | // | |
51 | IPAddress::IPAddress() : | |
52 | host (0), | |
53 | port (0) {} | |
54 | ||
55 | // ----------------------------------------------------------------------------- | |
56 | // | |
57 | IPAddress::IPAddress (unsigned long host, unsigned short port) : | |
58 | host (host), | |
59 | port (port) {} | |
60 | ||
61 | // ----------------------------------------------------------------------------- | |
62 | // | |
63 | IPAddress::IPAddress (const IPAddress& other) : | |
64 | host (other.host), | |
65 | port (other.port) {} | |
66 | ||
67 | // ----------------------------------------------------------------------------- | |
68 | // | |
88
08ccaf26cffd
Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents:
81
diff
changeset
|
69 | String IPAddress::to_string (WithPort withport) const |
5 | 70 | { |
71 | String val; | |
72 | ||
88
08ccaf26cffd
Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents:
81
diff
changeset
|
73 | if (withport == WITH_PORT) |
5 | 74 | val.sprintf ("%u.%u.%u.%u:%u", octet (0), octet (1), octet (2), octet (3), port); |
75 | else | |
76 | val.sprintf ("%u.%u.%u.%u", octet (0), octet (1), octet (2), octet (3)); | |
77 | ||
78 | return val; | |
79 | } | |
80 | ||
81 | // ----------------------------------------------------------------------------- | |
82 | // | |
88
08ccaf26cffd
Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents:
81
diff
changeset
|
83 | unsigned char IPAddress::octet (int n) const |
5 | 84 | { |
85 | return (host >> ((3 - n) * 8)) & 0xFF; | |
86 | } | |
87 | ||
88 | // ----------------------------------------------------------------------------- | |
89 | // | |
88
08ccaf26cffd
Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents:
81
diff
changeset
|
90 | void IPAddress::set_octet (int n, unsigned char oct) |
5 | 91 | { |
92 | // TODO: make a big-endian version | |
93 | host &= ~(0xFF << (3 - n) * 8); | |
94 | host |= oct << ((3 - n) * 8); | |
95 | } | |
96 | ||
97 | // ----------------------------------------------------------------------------- | |
98 | // | |
88
08ccaf26cffd
Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents:
81
diff
changeset
|
99 | bool IPAddress::compare (const IPAddress& other) const |
5 | 100 | { |
101 | for (int i = 0; i < 4; ++i) | |
102 | { | |
103 | if (octet (i) != other.octet (i)) | |
104 | return false; | |
105 | } | |
106 | ||
107 | if (port != 0 | |
108 | and other.port != 0 | |
109 | and port != other.port) | |
110 | { | |
111 | return false; | |
112 | } | |
113 | ||
114 | return true; | |
115 | } | |
116 | ||
117 | // ----------------------------------------------------------------------------- | |
118 | // | |
88
08ccaf26cffd
Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents:
81
diff
changeset
|
119 | bool IPAddress::operator< (const IPAddress& other) const |
5 | 120 | { |
121 | for (int i = 0; i < 4; ++i) | |
122 | { | |
123 | if (octet (i) != other.octet (i)) | |
124 | return octet (i) < other.octet (i); | |
125 | } | |
126 | ||
127 | return port < other.port; | |
128 | } | |
129 | ||
130 | // ----------------------------------------------------------------------------- | |
131 | // | |
88
08ccaf26cffd
Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents:
81
diff
changeset
|
132 | sockaddr_in IPAddress::to_sockaddr_in() const |
5 | 133 | { |
134 | sockaddr_in claddr; | |
135 | memset (&claddr, 0, sizeof claddr); | |
136 | claddr.sin_addr.s_addr = htonl (host); | |
137 | claddr.sin_port = htons (port); | |
138 | claddr.sin_family = AF_INET; | |
139 | return claddr; | |
140 | } | |
141 | ||
142 | // ----------------------------------------------------------------------------- | |
143 | // | |
88
08ccaf26cffd
Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents:
81
diff
changeset
|
144 | IPAddress IPAddress::from_string (String input) |
5 | 145 | { |
146 | unsigned int parts[4]; | |
147 | int colonpos = input.find (":"); | |
148 | String addressString = colonpos == -1 ? input : input.mid (0, colonpos); | |
149 | IPAddress value; | |
150 | ||
7
01e4e9ae323a
- fixed some problems with the ip address
Teemu Piippo <crimsondusk64@gmail.com>
parents:
5
diff
changeset
|
151 | // Try scanf the IPv4 host first |
5 | 152 | if (sscanf (addressString, "%u.%u.%u.%u", &parts[0], &parts[1], &parts[2], &parts[3])) |
153 | { | |
154 | for (short i = 0; i < 4; ++i) | |
155 | value.set_octet (i, parts[i]); | |
156 | } | |
157 | else | |
158 | { | |
7
01e4e9ae323a
- fixed some problems with the ip address
Teemu Piippo <crimsondusk64@gmail.com>
parents:
5
diff
changeset
|
159 | // Possibly a hostname, try resolve it |
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:
19
diff
changeset
|
160 | value = IPAddress::resolve (addressString); |
5 | 161 | } |
162 | ||
163 | if (colonpos != -1) | |
88
08ccaf26cffd
Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents:
81
diff
changeset
|
164 | value.port = (unsigned short) input.mid (colonpos + 1, -1).to_int(); |
5 | 165 | |
166 | return value; | |
167 | } | |
168 | ||
169 | // ----------------------------------------------------------------------------- | |
170 | // | |
88
08ccaf26cffd
Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents:
81
diff
changeset
|
171 | IPAddress IPAddress::resolve (String node) |
5 | 172 | { |
81
a18aaf460648
Allow compilation on Windows/MinGW
Teemu Piippo <crimsondusk64@gmail.com>
parents:
73
diff
changeset
|
173 | AddrInfo hints; |
a18aaf460648
Allow compilation on Windows/MinGW
Teemu Piippo <crimsondusk64@gmail.com>
parents:
73
diff
changeset
|
174 | AddrInfo* lookup; |
5 | 175 | memset (&hints, 0, sizeof hints); |
176 | hints.ai_family = AF_INET; | |
177 | ||
10
3874575d924d
- begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
9
diff
changeset
|
178 | if (getaddrinfo (node, nullptr, &hints, &lookup) != 0) |
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:
19
diff
changeset
|
179 | throw StringParseError ("unknown host " + node); |
5 | 180 | |
181 | IPAddress result; | |
182 | assert (lookup != nullptr); | |
19
2046a1651c0b
- removed needless 'struct's
Teemu Piippo <crimsondusk64@gmail.com>
parents:
10
diff
changeset
|
183 | sockaddr_in* addr = reinterpret_cast<sockaddr_in*> (lookup[0].ai_addr); |
5 | 184 | result.host = ntohl (addr->sin_addr.s_addr); |
185 | result.port = ntohs (addr->sin_port); | |
186 | freeaddrinfo (lookup); | |
187 | return result; | |
188 | } | |
88
08ccaf26cffd
Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents:
81
diff
changeset
|
189 | |
08ccaf26cffd
Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents:
81
diff
changeset
|
190 | END_ZFC_NAMESPACE |