1 /*
2 Copyright (C) 2015-2021, Dirk Krause
3 SPDX-License-Identifier: BSD-3-Clause
4 */
5
6 /*
7 WARNING: This file was generated by the dkct program (see
8 http://dktools.sourceforge.net/ for details).
9 Changes you make here will be lost if dkct is run again!
10 You should modify the original source and run dkct on it.
11 Original source: dk4socka09.ctr
12 */
13
14 /** @file dk4socka09.c The dk4socka09 module.
15 */
16
17
18 #include "dk4conf.h"
19 #include <libdk4sock/dk4sock.h>
20 #include <libdk4socka/dk4socka.h>
21 #include <libdk4base/dk4error.h>
22 #include <libdk4base/dk4mem.h>
23
24
25
26
27
28
29
30 dk4_socket_set_t *
dk4socket_set_service_app(const dkChar * servicename,int backlog,int local,dk4_app_t * app)31 dk4socket_set_service_app(
32 const dkChar *servicename,
33 int backlog,
34 int local,
35 dk4_app_t *app
36 )
37 {
38 dkChar habuf[128];
39 dk4_sockaddr_storage_t sname;
40 dk4_er_t er;
41 const dkChar *msgt[8];
42 const dkChar * const *ltx = NULL;
43 dk4_socket_set_t *back = NULL;
44 struct sockaddr *so = NULL;
45 #if VERSION_BEFORE_20150821
46 struct sockaddr_in *in4 = NULL;
47 #endif
48 #if DK4_HAVE_STRUCT_SOCKADDR_IN6
49 #if VERSION_BEFORE_20150821
50 struct sockaddr_in6 *in6 = NULL;
51 #endif
52 #endif
53 size_t i = 0; /* Traverse socket set */
54 #if DK4_HAVE_SOCKLEN_T
55 socklen_t slgt = 0;
56 #else
57 int slgt = 0;
58 #endif
59 int res = 0; /* Operation result */
60 int hat = 0; /* Have address text */
61
62 if ((NULL != servicename) && (0 < backlog)) {
63 dk4error_init(&er);
64 back = dk4socket_set_service(servicename, backlog, local, &er);
65 if (NULL != back) {
66 if (0 != dk4app_log_do(app, DK4_LL_PROGRESS)) {
67 ltx = dk4socket_log_texts(app);
68 if (NULL != ltx) {
69 for (i = 0; i < back->szUsed; i++) {
70 hat = 0;
71 #if DK4_HAVE_SOCKLEN_T
72 slgt = (socklen_t)sizeof(sname);
73 #else
74 slgt = (int)sizeof(sname);
75 #endif
76 so = (struct sockaddr *)(&sname);
77 res = getsockname((back->pSockets)[i], so, &slgt);
78 if (0 == res) {
79 switch (so->sa_family) {
80 case AF_INET : {
81 if (sizeof(struct sockaddr_in) == slgt) {
82 #if VERSION_BEFORE_20150821
83 in4 = (struct sockaddr_in *)so;
84 #endif
85 res = dk4socket_addr_port_to_text(
86 habuf, DK4_SIZEOF(habuf,dkChar), AF_INET,
87 so, sizeof(struct sockaddr_in), NULL
88 );
89 if (DK4_SOCKET_RESULT_SUCCESS == res) {
90 hat = 1;
91 }
92 }
93 } break;
94 #if DK4_HAVE_STRUCT_SOCKADDR_IN6
95 case AF_INET6 : {
96 if (sizeof(struct sockaddr_in6) == slgt) {
97 #if VERSION_BEFORE_20150821
98 in6 = (struct sockaddr_in6 *)so;
99 #endif
100 res = dk4socket_addr_port_to_text(
101 habuf, DK4_SIZEOF(habuf,dkChar), AF_INET6,
102 so, sizeof(struct sockaddr_in6), NULL
103 );
104 if (DK4_SOCKET_RESULT_SUCCESS == res) {
105 hat = 1;
106 }
107 }
108 } break;
109 #endif
110 }
111 if (0 != hat) {
112 msgt[0] = ltx[140];
113 msgt[1] = habuf;
114 msgt[2] = NULL;
115 dk4app_log_msg(app, DK4_LL_PROGRESS, msgt, 2);
116 }
117 }
118 }
119 }
120 }
121 } else {
122 dk4socket_log_simple_1(app, DK4_LL_ERROR, 139, &er);
123 }
124 }
125 return back;
126 }
127
128