| 327 | } |
| 328 | |
| 329 | void servermsinit(bool listen) |
| 330 | { |
| 331 | if(scl.master && *scl.master) copystring(mastername, scl.master); |
| 332 | usemaster = !listen || (listen && scl.master && scl.ssk && scl.maxclients <= MAXCLIENTSONMASTER); // true: connect to master, false: LAN-only server |
| 333 | if(scl.maxclients > MAXCLIENTSONMASTER) mlog(ACLOG_WARNING, "maxclient exceeded: cannot register"); |
| 334 | disconnectmaster(); |
| 335 | |
| 336 | if(listen) |
| 337 | { |
| 338 | ENetAddress address = { ENET_HOST_ANY, (enet_uint16) CUBE_SERVINFO_PORT(scl.serverport) }; |
| 339 | if(*scl.ip) |
| 340 | { |
| 341 | if(enet_address_set_host(&address, scl.ip) < 0) mlog(ACLOG_WARNING, "server ip \"%s\" not resolved", scl.ip); |
| 342 | else serveraddress.host = address.host; |
| 343 | } |
| 344 | |
| 345 | pongsock = enet_socket_create(ENET_SOCKET_TYPE_DATAGRAM); |
| 346 | if(pongsock != ENET_SOCKET_NULL && enet_socket_bind(pongsock, &address) < 0) |
| 347 | { |
| 348 | enet_socket_destroy(pongsock); |
| 349 | pongsock = ENET_SOCKET_NULL; |
| 350 | } |
| 351 | if(pongsock == ENET_SOCKET_NULL) fatal("could not create server info socket"); |
| 352 | else enet_socket_set_option(pongsock, ENET_SOCKOPT_NONBLOCK, 1); |
| 353 | |
| 354 | address.port = CUBE_SERVINFO_PORT_LAN; |
| 355 | lansock = enet_socket_create(ENET_SOCKET_TYPE_DATAGRAM); |
| 356 | if(lansock != ENET_SOCKET_NULL && (enet_socket_set_option(lansock, ENET_SOCKOPT_REUSEADDR, 1) < 0 || enet_socket_bind(lansock, &address) < 0)) |
| 357 | { |
| 358 | enet_socket_destroy(lansock); |
| 359 | lansock = ENET_SOCKET_NULL; |
| 360 | } |
| 361 | if(lansock == ENET_SOCKET_NULL) mlog(ACLOG_WARNING, "could not create LAN server info socket"); |
| 362 | else enet_socket_set_option(lansock, ENET_SOCKOPT_NONBLOCK, 1); |
| 363 | } |
| 364 | if(!usemaster){ |
| 365 | mlog(ACLOG_INFO, "server is LAN-only - without connection to masterserver"); |
| 366 | if(listen){ |
| 367 | if(!scl.ssk) mlog(ACLOG_INFO, "ACTION REQUIRED: you must provide a PRIVATE SERVER KEY via the '-Y' command line argument"); |
| 368 | if(!scl.master) mlog(ACLOG_INFO, "LAN-only because no master is given"); |
| 369 | if(scl.maxclients>MAXCLIENTSONMASTER) mlog(ACLOG_INFO, "LAN-only because too many clients for master"); |
| 370 | } |
| 371 | } |
| 372 | } |
no test coverage detected