Exemplo n.º 1
0
/* tells the server who am i */
TEG_STATUS out_id()
{
    if( ESTADO_MAYOR_IGUAL(PLAYER_STATUS_CONNECTED ) )
        return TEG_STATUS_ERROR;

    strip_invalid(g_game.myname);
    net_printf( g_game.fd, TOKEN_PLAYERID"=%s,%d,%d\n", g_game.myname, !g_game.observer, g_game.human );
    return TEG_STATUS_SUCCESS;
}
Exemplo n.º 2
0
/* find the internet address of a player */
TEG_STATUS aux_find_inaddr( PSPLAYER pJ )
{
    struct sockaddr *sa;
    socklen_t slen = 128;

    assert(pJ);

    strncpy(pJ->addr, _("Unknown"), sizeof(pJ->addr)-1);

#ifdef WITH_GGZ
    if(g_server.with_ggz) {
        strncpy(pJ->addr, _("GGZ Client"), sizeof(pJ->addr)-1);
        return TEG_STATUS_SUCCESS;
    }
#endif /* WITH_GGZ */

    if( pJ->fd <= 0)
        return TEG_STATUS_ERROR;

    if( (sa=malloc(slen)) == NULL )
        return TEG_STATUS_ERROR;

    if( getpeername( pJ->fd, sa, &slen ) == -1) {
        con_text_out(M_ERR,"Error in getpeername()\n");
        pJ->addr[sizeof(pJ->addr)-1]=0;

        free(sa);
        return TEG_STATUS_ERROR;
    }

    switch(sa->sa_family) {
    case AF_INET: {
        struct sockaddr_in *sin = (struct sockaddr_in*) sa;
        my_inet_ntop( AF_INET, &sin->sin_addr,pJ->addr, sizeof(pJ->addr)-1);
        break;
    }
    case AF_INET6: {
        struct sockaddr_in6 *sin6 = (struct sockaddr_in6*) sa;
        my_inet_ntop( AF_INET6, &sin6->sin6_addr,pJ->addr, sizeof(pJ->addr)-1);
        break;
    }
    case AF_UNIX:
        strncpy(pJ->addr,"127.0.0.1",sizeof(pJ->addr)-1);
        break;
#if 0
        {
            struct sockaddr_un *unp = (struct sockaddr_un *) sa;
            if(unp->sun_path[0]==0)
                strncpy(pJ->addr,_("Unknown"),sizeof(pJ->addr)-1);
            else
                snprintf(pJ->addr, sizeof(pJ->addr)-1, "%s", unp->sun_path);
            break;
        }
#endif
    default:
        break;
    }

    pJ->addr[sizeof(pJ->addr)-1]=0;

    strip_invalid(pJ->addr);

    free(sa);

    return TEG_STATUS_SUCCESS;
}