aboutsummaryrefslogtreecommitdiff
path: root/tests/799.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/799.cpp')
-rw-r--r--tests/799.cpp83
1 files changed, 83 insertions, 0 deletions
diff --git a/tests/799.cpp b/tests/799.cpp
new file mode 100644
index 00000000..56032133
--- /dev/null
+++ b/tests/799.cpp
@@ -0,0 +1,83 @@
+#include <netdb.h>
+#include <stdint.h>
+#include <string.h>
+#include <assert.h>
+#include <stdio.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+#ifdef EMSCRIPTEN
+#include <net/arpa/inet.h>
+#endif
+
+#define uint16 uint16_t
+
+class NetworkAddress {
+private:
+ sockaddr_storage address; ///< The resolved address
+public:
+
+ /**
+ * Create a network address based on a unresolved host and port
+ * @param hostname the unresolved hostname
+ * @param port the port
+ * @param family the address family
+ */
+ NetworkAddress(const char *hostname = "", uint16 port = 0, int family = AF_UNSPEC)
+ {
+ memset(&this->address, 0, sizeof(this->address));
+ this->address.ss_family = family;
+ this->SetPort(port);
+ }
+
+ uint16 GetPort() const;
+ void SetPort(uint16 port);
+};
+
+/**
+ * Get the port.
+ * @return the port.
+ */
+uint16 NetworkAddress::GetPort() const
+{
+ printf("Get PORT family: %d\n", this->address.ss_family);
+ switch (this->address.ss_family) {
+ case AF_UNSPEC:
+ case AF_INET:
+ return ntohs(((const struct sockaddr_in *)&this->address)->sin_port);
+
+ case AF_INET6:
+ return ntohs(((const struct sockaddr_in6 *)&this->address)->sin6_port);
+
+ default:
+ throw 0;
+ }
+}
+
+/**
+ * Set the port.
+ * @param port set the port number.
+ */
+void NetworkAddress::SetPort(uint16 port)
+{
+ printf("Set PORT family: %d, port: %d\n", this->address.ss_family, port);
+ switch (this->address.ss_family) {
+ case AF_UNSPEC:
+ case AF_INET:
+ ((struct sockaddr_in*)&this->address)->sin_port = htons(port);
+ break;
+
+ case AF_INET6:
+ ((struct sockaddr_in6*)&this->address)->sin6_port = htons(port);
+ break;
+
+ default:
+ throw 0;
+ }
+}
+
+int main() {
+ NetworkAddress na("127.0.0.1", 3979);
+ printf("PORT: %d\n", na.GetPort());
+ return 0;
+}