コード例 #1
0
ファイル: PackedDateTime.cpp プロジェクト: jebreimo/JEBLib
PackedDateTime packNow()
{
    int year, dayOfYear, secOfDay, tzSeconds;
    int64_t days, usecs;
    localdate(&year, &dayOfYear, &secOfDay, &tzSeconds);
    days = daysSinceEpochYD(YearDay(year, dayOfYear));
    usecs = secOfDay * USECS_PER_SEC;
    return packDaysUseconds(days, usecs - tzSeconds * USECS_PER_SEC);
}
コード例 #2
0
ファイル: PackedDateTime.cpp プロジェクト: jebreimo/JEBLib
 static long timezoneSecs()
 {
     static uint64_t gTimezoneSeconds = ULLONG_MAX;
     if (gTimezoneSeconds == ULLONG_MAX)
     {
         int year, dayOfYear, secOfDay, tzSeconds;
         localdate(&year, &dayOfYear, &secOfDay, &tzSeconds);
         gTimezoneSeconds = tzSeconds;
     }
     return gTimezoneSeconds;
 }
コード例 #3
0
ファイル: server_remoteadmin.c プロジェクト: rozzin/apf
int
serve_admin(ServerConfiguration* config, int realm, int client, unsigned char* buff)
{
  int length, n, i, j, ret;
  time_t now, tmp;
  llnodeT* llptr;
  AuditListNode* alptr;
  char olddf[51], newdf[51];
  ConnectClient* cpointer;
  ConnectUser* upointer;
  ServerRealm* pointer = ServerConfiguration_get_realmsTable(config)[realm];
  char type = ServerRealm_get_realmType(pointer) | TYPE_SSL | TYPE_ZLIB;
  SslFd* master = ConnectClient_get_sslFd(ServerRealm_get_raClientsTable(pointer)[client]);
 
  assert(config != NULL);
  assert(buff != NULL);
  
  olddf[50] = newdf[50] = 0;
  length = buff[3];
  length = length << 8;
  length += buff[4]; /* this is the length of a message */
  
  time(&now);
  
  switch (buff[1]) {
    case AF_RA_CMD: {
                      n = SslFd_get_message(type, master, buff, length);
                      buff[n] = 0;
                      aflog(LOG_T_MANAGE, LOG_I_INFO,
                          "realm[%s]: admin: message length = %d [%s]",
                          get_realmname(config, realm), n, buff);
                      switch (parse_cmd(buff, &ret)) {
                        case 1: { /* help */
                                  add_to_message(buff, AF_VER("AFSERVER"));
                                  add_to_message(buff, "\nValid commands are:");
                                  add_to_message(buff, "  help                 display help");
                                  add_to_message(buff, "  lcmd                 lists available commands");
                                  add_to_message(buff, "  info                 prints info about server");
                                  add_to_message(buff, "  rshow                display realms");
                                  add_to_message(buff, "  cshow X              display clients in X realm");
                                  add_to_message(buff, "  ushow X              display users in X realm");
                                  add_to_message(buff, "  quit                 quit connection");
                                  add_to_message(buff, "  timeout N X          set timeout value in X realm");
                                  add_to_message(buff, "  audit {0|1} X        set audit mode in X realm");
                                  add_to_message(buff, "  dnslookups {0|1} X   set dnslookups mode in X realm");
                                  add_to_message(buff, "  dateformat S         set dateformat");
                                  add_to_message(buff, "  kuser S              kick user named S");
                                  add_to_message(buff, "  kclient N            kick client with number N");
                                  send_adm_message(type, master, buff, AF_RA_STATUS_OK);
                                  break;
                                }
                        case 2: { /* lcmd */
                                  add_to_message(buff, "help");
                                  add_to_message(buff, "lcmd");
                                  add_to_message(buff, "info");
                                  add_to_message(buff, "rshow");
                                  add_to_message(buff, "cshow");
                                  add_to_message(buff, "ushow");
                                  add_to_message(buff, "quit");
                                  add_to_message(buff, "timeout");
                                  add_to_message(buff, "audit");
                                  add_to_message(buff, "dnslookups");
                                  add_to_message(buff, "dateformat");
                                  add_to_message(buff, "kuser");
                                  add_to_message(buff, "kclient");
                                  send_adm_message(type, master, buff, AF_RA_STATUS_OK);
                                  break;
                                }
                        case 3: { /* info */
                                  add_to_message(buff, AF_VER("Version:"));
                                  add_to_message(buff, "Realms: %d",
                                      ServerConfiguration_get_realmsNumber(config));
                                  add_to_message(buff, "Certificate: %s",
                                      ServerConfiguration_get_certificateFile(config));
                                  add_to_message(buff, "Key: %s",
                                      ServerConfiguration_get_keysFile(config));
                                  llptr = getloglisthead();
                                  i = 0;
                                  while (llptr) {
                                    add_to_message(buff, "log[%d]: %s", i, llptr->cmdline);
                                    llptr = llptr->next;
                                    ++i;
                                  }
                                  tmp = now - ServerConfiguration_get_startTime(config);
                                  add_uptime_to_message(buff, "Uptime", tmp);
                                  add_to_message(buff, "Cg: %ld B", getcg());
                                  add_to_message(buff, "Dateformat: %s", getdateformat());
                                  send_adm_message(type, master, buff, AF_RA_STATUS_OK);
                                  break;
                                }
                        case 4: { /* rshow */
                                  for (i = 0; i < ServerConfiguration_get_realmsNumber(config); ++i) {
                                    pointer = ServerConfiguration_get_realmsTable(config)[i];
                                    add_to_message(buff, "\nRealm[%s]:", get_realmname(config, i));
                                    add_to_message(buff, "hostname: %s", ServerRealm_get_hostName(pointer));
                                    add_to_message(buff, "users: %d (max: %d)",
                                        ServerRealm_get_connectedUsers(pointer),
                                        ServerRealm_get_usersLimit(pointer));
                                    add_to_message(buff, "clients: %d (max: %d)",
                                        ServerRealm_get_connectedClients(pointer) -
                                        ServerRealm_get_connectedRaClients(pointer),
                                        ServerRealm_get_clientsLimit(pointer));
                                    add_to_message(buff, "raclients: %d (max: %d)",
                                        ServerRealm_get_connectedRaClients(pointer),
                                        ServerRealm_get_raClientsLimit(pointer));
                                    add_to_message(buff, "users per client: %s",
                                        ServerRealm_get_sUsersPerClient(pointer));
                                    add_to_message(buff, "user-client pairs: %d",
                                        ServerRealm_get_userClientPairs(pointer));
                                    for (j = 0; j < ServerRealm_get_userClientPairs(pointer); ++j) {
                                      add_to_message(buff, " pair[%d]: listenport: %s, manageport: %s", j,
                                          UsrCli_get_listenPortName(
                                            ServerRealm_get_usersClientsTable(pointer)[j]),
                                          UsrCli_get_managePortName(
                                            ServerRealm_get_usersClientsTable(pointer)[j]));
                                    }
                                    add_to_message(buff, "climode: %s", ServerRealm_get_sClientMode(pointer));
                                    add_to_message(buff, "timeout: %d", ServerRealm_get_timeout(pointer));
                                    if (ServerRealm_get_maxIdle(pointer)) {
                                      add_to_message(buff, "max idle: %d", ServerRealm_get_maxIdle(pointer));
                                    }
                                    else {
                                      add_to_message(buff, "max idle: disabled");
                                    }
                                    add_to_message(buff, "baseport: %s", ServerRealm_get_basePortOn(pointer) ?
                                        "yes" : "no");
                                    add_to_message(buff, "audit: %s", ServerRealm_get_auditOn(pointer) ?
                                        "yes" : "no");
                                    add_to_message(buff, "dnslookups: %s",
                                        ServerRealm_get_dnsLookupsOn(pointer) ? "yes" : "no");
                                    add_to_message(buff, "ssl: %s, zlib: %s, mode: %s",
                                        (TYPE_IS_SSL(ServerRealm_get_realmType(pointer))) ? "yes" : "no",
                                        (TYPE_IS_ZLIB(ServerRealm_get_realmType(pointer))) ? "yes" : "no",
                                        (TYPE_IS_TCP(ServerRealm_get_realmType(pointer))) ? "tcp" : "udp");
                                    switch (ServerRealm_get_tunnelType(pointer)) {
                                      case CONNECTCLIENT_TUNNELTYPE_DIRECT: {
                                                add_to_message(buff, "tunneltype: direct");
                                                break;
                                              }
                                      case CONNECTCLIENT_TUNNELTYPE_HTTPPROXY: {
                                                add_to_message(buff, "tunneltype: http proxy");
                                                break;
                                              }
                                      case CONNECTCLIENT_TUNNELTYPE_HTTPSPROXY: {
                                                add_to_message(buff, "tunneltype: https proxy");
                                                break;
                                              }
                                      default: {
                                                 add_to_message(buff, "tunneltype: UNKNOWN");
                                               }
                                    }
                                  }
                                  send_adm_message(type, master, buff, AF_RA_STATUS_OK);
                                  break;
                                }
                        case 5: { /* cshow*/
                                  n = get_realmnumber(config, (char*) &buff[ret]);
                                  if ((n >= 0) && (n < ServerConfiguration_get_realmsNumber(config))) {
                                    pointer = ServerConfiguration_get_realmsTable(config)[n];
                                    for (i = 0; i < ServerRealm_get_clientsLimit(pointer); ++i) {
                                      cpointer = ServerRealm_get_clientsTable(pointer)[i];
                                      if (ConnectClient_get_state(cpointer) != CONNECTCLIENT_STATE_FREE) {
                                        add_to_message(buff, "\nClient[%s]:",
                                            get_clientname(pointer, i));
                                        switch (ConnectClient_get_state(cpointer)) {
                                          case CONNECTCLIENT_STATE_CONNECTING: {
                                                    add_to_message(buff, "state: ssl handshake");
                                                    break;
                                                  }
                                          case CONNECTCLIENT_STATE_AUTHORIZING: {
                                                    add_to_message(buff, "state: authorization");
                                                    break;
                                                  }
                                          case CONNECTCLIENT_STATE_ACCEPTED: {
                                                    add_to_message(buff, "state: running");
                                                    break;
                                                  }
                                          default: {
                                                    add_to_message(buff, "state: unknown");
                                                   }
                                        }
                                        add_to_message(buff, "users: %d (max: %d)",
                                            ConnectClient_get_connected(cpointer),
                                            ConnectClient_get_limit(cpointer));
                                        add_to_message(buff, "user-client pair: %d",
                                            ConnectClient_get_usrCliPair(cpointer)); 
                                        tmp = now - ConnectClient_get_connectTime(cpointer);
                                        add_uptime_to_message(buff, "Connection time", tmp);
                                        tmp = now - ConnectClient_get_lastActivity(cpointer);
                                        add_uptime_to_message(buff, "Idle time", tmp);
                                        add_to_message(buff, "Id: %s",
                                            (ConnectClient_get_sClientId(cpointer) == NULL) ? "" :
                                            ConnectClient_get_sClientId(cpointer));
                                        add_to_message(buff, "Number: %d",
                                            ConnectClient_get_clientId(cpointer));
                                        add_to_message(buff, "IP: %s, port: %s",
                                            ConnectClient_get_nameBuf(cpointer),
                                            ConnectClient_get_portBuf(cpointer));
                                        switch (ConnectClient_get_tunnelType(cpointer)) {
                                          case CONNECTCLIENT_TUNNELTYPE_DIRECT: {
                                                    add_to_message(buff, "tunneltype: direct");
                                                    break;
                                                  }
                                          case CONNECTCLIENT_TUNNELTYPE_HTTPPROXY: {
                                                    add_to_message(buff, "tunneltype: http proxy");
                                                    break;
                                                  }
                                          case CONNECTCLIENT_TUNNELTYPE_HTTPSPROXY: {
                                                    add_to_message(buff, "tunneltype: https proxy");
                                                    break;
                                                  }
                                          default: {
                                                     add_to_message(buff, "tunneltype: UNKNOWN");
                                                   }
                                        }
                                        if (ServerRealm_get_auditOn(pointer)) {
                                          add_to_message(buff, "auditlog:");
                                          alptr = AuditList_get_first(
                                              ConnectClient_get_auditList(cpointer));
                                          while (alptr) {
                                            add_to_message(buff,
                                                "userid: %d ip: %s port: %s connected: %s duration: %s",
                                                AuditListNode_get_userId(alptr),
                                                AuditListNode_get_nameBuf(alptr),
                                                AuditListNode_get_portBuf(alptr),
                                                localdate(AuditListNode_get_connectTimep(alptr)),
                                                timeperiod(AuditListNode_get_duration(alptr)));
                                            alptr = AuditListNode_get_nextNode(alptr);
                                          }
                                        }
                                      }
                                    }
                                    send_adm_message(type, master, buff, AF_RA_STATUS_OK);
                                    break;
                                  }
                                  add_to_message(buff, "Wrong realm name");
                                  add_to_message(buff, "Usage: cshow X      , X - realm name");
                                  send_adm_message(type, master, buff, AF_RA_FAILED);
                                  break;
                                }
                        case 6: { /* ushow */
                                  n = get_realmnumber(config, (char*) &buff[ret]);
                                  if ((n >= 0) && (n < ServerConfiguration_get_realmsNumber(config))) {
                                    pointer = ServerConfiguration_get_realmsTable(config)[n];
                                    for (i = 0; i < ServerRealm_get_usersLimit(pointer); ++i) {
                                      upointer = ServerRealm_get_usersTable(pointer)[i];
                                      if (ConnectUser_get_state(upointer) != S_STATE_CLEAR) {
                                        add_to_message(buff, "\nUser[%d]:",
                                            get_username(pointer, i));
                                        switch (ConnectUser_get_state(upointer)) {
                                          case S_STATE_CLOSING: {
                                                    add_to_message(buff, "state: closing");
                                                    break;
                                                  }
                                          case S_STATE_OPENING: {
                                                    add_to_message(buff, "state: opening");
                                                    break;
                                                  }
                                          case S_STATE_OPENING_CLOSED: {
                                                    add_to_message(buff, "state: opening (closed)");
                                                    break;
                                                  }
                                          case S_STATE_OPEN: {
                                                    add_to_message(buff, "state: running");
                                                    break;
                                                  }
                                          case S_STATE_STOPPED: {
                                                    add_to_message(buff, "state: stopped");
                                                    break;
                                                  }
                                          default: {
                                                    add_to_message(buff, "state: unknown");
                                                   }
                                        }
                                        add_to_message(buff, "connected to: Client[%s]",
                                            get_clientname(pointer, ConnectUser_get_whatClient(upointer)));
                                        tmp = now-ConnectUser_get_connectTime(upointer);
                                        add_uptime_to_message(buff, "Connection time", tmp);
                                        tmp = now - UserStats_get_lastActivity(
                                            ConnectUser_get_stats(upointer));
                                        add_uptime_to_message(buff, "Idle time", tmp);
                                        add_to_message(buff, "IP: %s, port: %s",
                                            ConnectUser_get_nameBuf(upointer),
                                            ConnectUser_get_portBuf(upointer));
                                        add_to_message(buff, "Downloaded: %d bytes",
                                            UserStats_get_totalDownloadedBytes(
                                              ConnectUser_get_stats(upointer)));
                                        add_to_message(buff, "download speed: %.2f B/s",
                                            UserStats_get_downloadSpeed(
                                              ConnectUser_get_stats(upointer)));
                                        add_to_message(buff, "Uploaded: %d bytes",
                                            UserStats_get_totalUploadedBytes(
                                              ConnectUser_get_stats(upointer)));
                                        add_to_message(buff, "upload speed: %.2f B/s",
                                            UserStats_get_uploadSpeed(
                                              ConnectUser_get_stats(upointer)));
                                      }
                                    }
                                    send_adm_message(type, master, buff, AF_RA_STATUS_OK);
                                    break;
                                  }
                                  add_to_message(buff, "Wrong realm name");
                                  add_to_message(buff, "Usage: ushow X      , X - realm name");
                                  send_adm_message(type, master, buff, AF_RA_FAILED);
                                  break;
                                }
                        case 7: { /* quit */
                                  aflog(LOG_T_MANAGE, LOG_I_INFO,
                                      "realm[%s]: Client[%s] (ra): commfd: CLOSED",
                                      get_realmname(config, realm),
                                      get_raclientname(pointer, client));
                                  send_adm_message(type, master, buff, AF_RA_KICKED);
                                  return 1;
                                }
                        case 8: { /* timeout */
                                  i = parse_int(buff, &ret);
                                  if (i <= 0) {
                                    add_to_message(buff, "Invalid timeout value");
                                    add_to_message(buff,
                                        "Usage: timeout N X      , N - new timeout value, X - realm name");
                                    send_adm_message(type, master, buff, AF_RA_FAILED);
                                    break;
                                  }
                                  n = get_realmnumber(config, (char*) &buff[ret]);
                                  if ((n >= 0) && (n < ServerConfiguration_get_realmsNumber(config))) {
                                    add_to_message(buff, "changed timeout: %d --> %d",
                                        ServerRealm_get_timeout(
                                          ServerConfiguration_get_realmsTable(config)[n]), i);
                                    ServerRealm_set_timeout(ServerConfiguration_get_realmsTable(config)[n], i);
                                    send_adm_message(type, master, buff, AF_RA_STATUS_OK);
                                    break;
                                  }
                                  add_to_message(buff, "Wrong realm name");
                                  add_to_message(buff,
                                      "Usage: timeout N X      , N - new timeout value, X - realm name");
                                  send_adm_message(type, master, buff, AF_RA_FAILED);
                                  break;
                                }
                        case 9: { /* audit */
                                  i = parse_int(buff, &ret);
                                  if ((i != 0) && (i != 1)) {
                                    add_to_message(buff, "Invalid audit value");
                                    add_to_message(buff,
                                        "Usage: audit {0|1} X      , N=0 off, N=1 on, X - realm name");
                                    send_adm_message(type, master, buff, AF_RA_FAILED);
                                    break;
                                  }
                                  n = get_realmnumber(config, (char*) &buff[ret]);
                                  if ((n >= 0) && (n < ServerConfiguration_get_realmsNumber(config))) {
                                    add_to_message(buff, "changed audit: %s --> %s",
                                        ServerRealm_get_auditOn(
                                          ServerConfiguration_get_realmsTable(config)[n]) ? "yes" : "no",
                                        i ? "yes" : "no");
                                    ServerRealm_set_auditOn(ServerConfiguration_get_realmsTable(config)[n], i);
                                    if (i == 0) {
                                      for (i = 0; i < ServerRealm_get_clientsLimit(
                                            ServerConfiguration_get_realmsTable(config)[n]); ++i) {
                                        AuditList_clear(
                                            ConnectClient_get_auditList(
                                              ServerRealm_get_clientsTable(
                                                ServerConfiguration_get_realmsTable(config)[n])[i]));
                                      }
                                    }
                                    send_adm_message(type, master, buff, AF_RA_STATUS_OK);
                                    break;
                                  }
                                  add_to_message(buff, "Wrong realm name");
                                  add_to_message(buff,
                                      "Usage: audit {0|1} X      , N=0 off, N=1 on, X - realm name");
                                  send_adm_message(type, master, buff, AF_RA_FAILED);
                                  break;
                                }
                        case 10: { /* dnslookups */
                                  i = parse_int(buff, &ret);
                                  if ((i != 0) && (i != 1)) {
                                    add_to_message(buff, "Invalid dnslookups value");
                                    add_to_message(buff,
                                        "Usage: dnslookups {0|1} X      , N=0 off, N=1 on, X - realm name");
                                    send_adm_message(type, master, buff, AF_RA_FAILED);
                                    break;
                                  }
                                  n = get_realmnumber(config, (char*) &buff[ret]);
                                  if ((n >= 0) && (n < ServerConfiguration_get_realmsNumber(config))) {
                                    add_to_message(buff, "changed dnslookups: %s --> %s",
                                        ServerRealm_get_dnsLookupsOn(
                                          ServerConfiguration_get_realmsTable(config)[n]) ? "yes" : "no",
                                        i ? "yes" : "no");
                                    ServerRealm_set_dnsLookupsOn(
                                        ServerConfiguration_get_realmsTable(config)[n], i);
                                    send_adm_message(type, master, buff, AF_RA_STATUS_OK);
                                    break;
                                  }
                                  add_to_message(buff, "Wrong realm name");
                                  add_to_message(buff,
                                      "Usage: dnslookups {0|1} X      , N=0 off, N=1 on, X - realm name");
                                  send_adm_message(type, master, buff, AF_RA_FAILED);
                                  break;
                                }
                        case 11: { /* dateformat */
                                  strncpy(olddf, getdateformat(), 50);
                                  strncpy(newdf, (char*) &buff[ret], 50);
                                  add_to_message(buff, "changed dateformat: %s --> %s",
                                      olddf, newdf);
                                  setdateformat(newdf);
                                  send_adm_message(type, master, buff, AF_RA_STATUS_OK);
                                  break;
                                }
                        case 12: { /* kuser */
                                  i = parse_int(buff, &ret);
                                  if (buff[ret] != 0) {
                                    add_to_message(buff, "Invalid user name");
                                    add_to_message(buff,
                                        "Usage: kuser S      , S - user name");
                                    send_adm_message(type, master, buff, AF_RA_FAILED);
                                    break;
                                  }
                                  j = -1;
                                  for (n = 0; n < ServerConfiguration_get_realmsNumber(config); ++n) {
                                    pointer = ServerConfiguration_get_realmsTable(config)[n];
                                    j = get_usernumber(pointer, i);
                                    if (j != (-1)) {
                                      upointer = ServerRealm_get_usersTable(pointer)[j];
                                      if ((ConnectUser_get_state(upointer) == S_STATE_OPEN) ||
                                          (ConnectUser_get_state(upointer) == S_STATE_OPENING) ||
                                          (ConnectUser_get_state(upointer) == S_STATE_STOPPED)) {
                                        add_to_message(buff, "kicked: realm[%s] user[%d]",
                                            get_realmname(config, n), get_username(pointer, j));
                                        if (ConnectUser_get_state(upointer) == S_STATE_OPENING) {
                                          ConnectUser_set_state(upointer, S_STATE_OPENING_CLOSED);
                                        }
                                        else {
                                          close(ConnectUser_get_connFd(upointer));
                                        }
                                        send_adm_message(type, master, buff, AF_RA_STATUS_OK);
                                      }
                                      else {
                                        add_to_message(buff, "Invalid user");
                                        add_to_message(buff,
                                            "Usage: kuser S      , S - user name");
                                        send_adm_message(type, master, buff, AF_RA_FAILED);
                                      }
                                      break;
                                    }
                                  }
                                  if (j == (-1)) {
                                    add_to_message(buff, "Invalid user name");
                                    add_to_message(buff,
                                        "Usage: kuser S      , S - user name");
                                    send_adm_message(type, master, buff, AF_RA_FAILED);
                                  }
                                  break;
                                }
                        case 13: { /* kclient */
                                  i = parse_int(buff, &ret);
                                  if (buff[ret] != 0) {
                                    add_to_message(buff, "Invalid client number");
                                    add_to_message(buff,
                                        "Usage: kclient N      , N - client number");
                                    send_adm_message(type, master, buff, AF_RA_FAILED);
                                    break;
                                  }
                                  j = -1;
                                  for (n = 0; n < ServerConfiguration_get_realmsNumber(config); ++n) {
                                    pointer = ServerConfiguration_get_realmsTable(config)[n];
                                    j = get_clientnumber(pointer, i);
                                    if (j != (-1)) {
                                      if (ConnectClient_get_state(ServerRealm_get_clientsTable(pointer)[j]) >
                                          CONNECTCLIENT_STATE_FREE) {
                                        add_to_message(buff, "kicked: realm[%s] client[%s]",
                                            get_realmname(config, n),
                                            get_clientname(pointer, j));
                                        send_adm_message(type, master, buff, AF_RA_STATUS_OK);
                                        return (i+2);
                                      }
                                      else {
                                        add_to_message(buff, "Invalid client");
                                        add_to_message(buff,
                                            "Usage: kclient N      , N - client number");
                                        send_adm_message(type, master, buff, AF_RA_FAILED);
                                      }
                                      break;
                                    }
                                  }
                                  if (j == (-1)) {
                                    add_to_message(buff, "Invalid client number");
                                    add_to_message(buff,
                                        "Usage: kclient N      , N - client number");
                                    send_adm_message(type, master, buff, AF_RA_FAILED);
                                  }
                                  break;

                                }
                        default: {
                                  aflog(LOG_T_MANAGE, LOG_I_WARNING,
                                      "realm[%s]: admin: cmd ignored", get_realmname(config, realm));
                                  send_adm_message(type, master, buff, AF_RA_UNDEFINED);
                                 }
                      }
                      break;
                    }
    case AF_RA_REPEAT: {
                         break;
                       }
    default: {
               aflog(LOG_T_MANAGE, LOG_I_ERR,
                   "Unrecognized message from remote admin --> closing");
               return 1;
             }
  }
  return 0;
}