getLocalIp/win1.c


Home Back


#include <gtk/gtk.h>    
#include "globals.c"


#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>

extern GtkBuilder *xml;





char* GetLocalIp() 
{
    /*Modificare per cambiare DNS server*/
    unsigned short port = 53;
    const char* GoogleDnsIp = "8.8.8.8";
 
 
    /*Riempo le strutture dati per il server DNS*/
    int sd;
    struct sockaddr_in server;
    struct hostent *hp;
 
    hp = gethostbyname(GoogleDnsIp);
    bzero(&server, sizeof(server));
    server.sin_family = AF_INET;
    server.sin_port = htons(port);
    server.sin_addr.s_addr =((struct in_addr*)(hp->h_addr))->s_addr;
 
    /*Riempo le strutture dati per il client*/
    struct sockaddr_in client;
    struct hostent *cp;
 
    cp = gethostbyname("127.0.0.1");
    bzero(&client, sizeof(client));
    client.sin_family = AF_INET;
    client.sin_port = htons(port);
    client.sin_addr.s_addr =((struct in_addr*)(cp->h_addr))->s_addr;
 
 
    /* Creo il socket */
    if((sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
    {
            printf("Errore nella creazione del socket!\n");
            return "Errore: NOSOCKET";
    }
 
 
    /* connettiamoci all'host */
    if (connect(sd, (struct sockaddr *)&server, sizeof(server)) < 0)
    {
        printf("Errore di connessione!\n");
        return "Errore: NOINTERNET";
    }
 
    /*Individuo il mio indirizzo ip pubblico*/
    socklen_t* clientlen = (socklen_t* )sizeof(client);
    getsockname(sd, (struct sockaddr *) &client, (socklen_t*) &clientlen);    
 
    /*Lo converto in stringa e lo scrivo sulla variabile*/
    char* MyLocalAddress=malloc(sizeof(20));
    inet_ntop(AF_INET, &client.sin_addr.s_addr, MyLocalAddress, 20);
 
    /*Chiudiamo il socket*/
    close(sd);
 
    return MyLocalAddress;
}


static void runVnc(GtkWidget *widget,gpointer data)
{
    g_spawn_command_line_async ("x11vnc", NULL);
}

static void stopVnc(GtkWidget *widget,gpointer data)
{
    g_spawn_command_line_async ("x11vnc -remote stop",NULL);
}




void initWindow1()
{
    GError* error = NULL;
    xml = gtk_builder_new ();
    if (!gtk_builder_add_from_resource  (xml, "/org/myapp/res/gui.ui", &error))
      {
        g_warning ("Error on load builder file: %s", error->message);
        g_error_free (error);
      }
    GObject* window1=gtk_builder_get_object (xml,"window1");
    GObject* label1=gtk_builder_get_object (xml,"label1");
    GObject* btRunVnc=gtk_builder_get_object (xml,"btRunVnc");
    GObject* btStopVnc=gtk_builder_get_object (xml,"btStopVnc");
    GObject* btExit=gtk_builder_get_object (xml,"btExit");
    
    gchar* ip = g_strdup_printf(GetLocalIp());
    gtk_label_set_text(GTK_LABEL(label1), ip);
    g_signal_connect (window1, "destroy", G_CALLBACK (gtk_main_quit), NULL);
    g_signal_connect (btRunVnc, "clicked", G_CALLBACK (runVnc), NULL);
    g_signal_connect (btStopVnc, "clicked", G_CALLBACK (stopVnc), NULL);
    g_signal_connect (btExit, "clicked", G_CALLBACK (gtk_main_quit), NULL);
    
    gtk_window_present(GTK_WINDOW(window1));
}



Powered by Code, a simple repository browser by Fabio Di Matteo