⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtkphone.c

📁 一款基于GTK的internet phone 程序。程序分为服务器端和客户端两部分。服务器端维护用户的IP
💻 C
📖 第 1 页 / 共 3 页
字号:
  window1 = gtk_window_new (GTK_WINDOW_DIALOG);  gtk_object_set_data (GTK_OBJECT (window1), "window1", window1);  gtk_window_set_title (GTK_WINDOW (window1), _("window1"));  gtk_window_set_position (GTK_WINDOW (window1), GTK_WIN_POS_CENTER);  gtk_window_set_policy (GTK_WINDOW (window1), TRUE, FALSE, TRUE);  frame1 = gtk_frame_new (NULL);  gtk_widget_ref (frame1);  gtk_object_set_data_full (GTK_OBJECT (window1), "frame1", frame1,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (frame1);  gtk_container_add (GTK_CONTAINER (window1), frame1);  vbox1 = gtk_vbox_new (FALSE, 0);  gtk_widget_ref (vbox1);  gtk_object_set_data_full (GTK_OBJECT (window1), "vbox1", vbox1,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (vbox1);  gtk_container_add (GTK_CONTAINER (frame1), vbox1);  gtk_container_set_border_width (GTK_CONTAINER (vbox1), 8);  label1 = gtk_label_new (_("Bzzt!\nIncoming call from:"));  gtk_widget_ref (label1);  gtk_object_set_data_full (GTK_OBJECT (window1), "label1", label1,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (label1);  gtk_box_pack_start (GTK_BOX (vbox1), label1, FALSE, FALSE, 0);   popup_label = gtk_label_new (_("[unknown]"));   gtk_widget_ref (popup_label);   gtk_object_set_data_full (GTK_OBJECT (window1), "popup_label", popup_label,			     (GtkDestroyNotify) gtk_widget_unref);   gtk_widget_show (popup_label);   gtk_box_pack_start (GTK_BOX (vbox1), popup_label, FALSE, FALSE, 3);     hseparator1 = gtk_hseparator_new ();  gtk_widget_ref (hseparator1);  gtk_object_set_data_full (GTK_OBJECT (window1), "hseparator1", hseparator1,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (hseparator1);  gtk_box_pack_start (GTK_BOX (vbox1), hseparator1, FALSE, FALSE, 3);  hbox1 = gtk_hbox_new (TRUE, 8);  gtk_widget_ref (hbox1);  gtk_object_set_data_full (GTK_OBJECT (window1), "hbox1", hbox1,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (hbox1);  gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);  gtk_container_set_border_width (GTK_CONTAINER (hbox1), 3);  button1 = gtk_button_new_with_label (_("Accept"));  gtk_widget_ref (button1);  gtk_object_set_data_full (GTK_OBJECT (window1), "button1", button1,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (button1);  gtk_box_pack_start (GTK_BOX (hbox1), button1, FALSE, FALSE, 0);  button2 = gtk_button_new_with_label (_("Ignore"));  gtk_widget_ref (button2);  gtk_object_set_data_full (GTK_OBJECT (window1), "button2", button2,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (button2);  gtk_box_pack_start (GTK_BOX (hbox1), button2, FALSE, FALSE, 0);      gtk_signal_connect(GTK_OBJECT(button1), "clicked",		      GTK_SIGNAL_FUNC(answerTalkRequest),		      NULL);      gtk_signal_connect(GTK_OBJECT(button2), "clicked",		      GTK_SIGNAL_FUNC(ignoreTalkRequest),		      NULL);         return window1;}   GtkWidget* create_gui_main (int udpsocket) {   GtkWidget *window1;   GtkWidget *vbox1;   GtkWidget *hbox1;   GtkWidget *vbox3;   GtkWidget *hbox2;   GtkWidget *label1;   GtkWidget *label2;   GtkWidget *label3;   GtkWidget *entry1;   GtkWidget *hbox3;   GtkWidget *button1;   GtkWidget *button2;   GtkWidget *scrolledwindow1;   GtkWidget *viewport1;   GtkWidget *scrolledwindow2;   GtkWidget *hseparator1;   GtkWidget *hbox4;   GtkWidget *button3;   GtkWidget *button4;   GtkWidget *button5;  window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);  gtk_object_set_data (GTK_OBJECT (window1), "window1", window1);  gtk_window_set_title (GTK_WINDOW (window1), _("window1"));   gtk_widget_set_usize (window1, 200, 300);     vbox1 = gtk_vbox_new (FALSE, 0);  gtk_widget_ref (vbox1);  gtk_object_set_data_full (GTK_OBJECT (window1), "vbox1", vbox1,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (vbox1);  gtk_container_add (GTK_CONTAINER (window1), vbox1);  hbox1 = gtk_hbox_new (FALSE, 0);  gtk_widget_ref (hbox1);  gtk_object_set_data_full (GTK_OBJECT (window1), "hbox1", hbox1,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (hbox1);  gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);  vbox3 = gtk_vbox_new (FALSE, 0);  gtk_widget_ref (vbox3);  gtk_object_set_data_full (GTK_OBJECT (window1), "vbox3", vbox3,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (vbox3);  gtk_box_pack_start (GTK_BOX (vbox1), vbox3, TRUE, TRUE, 0);  hbox2 = gtk_hbox_new (FALSE, 0);  gtk_widget_ref (hbox2);  gtk_object_set_data_full (GTK_OBJECT (window1), "hbox2", hbox2,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (hbox2);  gtk_box_pack_start (GTK_BOX (vbox3), hbox2, FALSE, FALSE, 0);  label1 = gtk_label_new (_("Name"));  gtk_widget_ref (label1);  gtk_object_set_data_full (GTK_OBJECT (window1), "label1", label1,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (label1);  gtk_box_pack_start (GTK_BOX (hbox2), label1, FALSE, FALSE, 0);  entry1 = gtk_entry_new ();  gtk_widget_ref (entry1);  gtk_object_set_data_full (GTK_OBJECT (window1), "entry1", entry1,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (entry1);  gtk_box_pack_start (GTK_BOX (hbox2), entry1, TRUE, TRUE, 0);   button5 = gtk_button_new_with_label (_("Call"));  gtk_widget_ref (button5);  gtk_object_set_data_full (GTK_OBJECT (window1), "button5", button5,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (button5);  gtk_box_pack_start (GTK_BOX (hbox2), button5, FALSE, FALSE, 0);     hbox3 = gtk_hbox_new (TRUE, 0);  gtk_widget_ref (hbox3);  gtk_object_set_data_full (GTK_OBJECT (window1), "hbox3", hbox3,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (hbox3);  gtk_box_pack_start (GTK_BOX (vbox3), hbox3, FALSE, FALSE, 3);  button1 = gtk_button_new_with_label (_("Add to List"));  gtk_widget_ref (button1);  gtk_object_set_data_full (GTK_OBJECT (window1), "button1", button1,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (button1);  gtk_box_pack_start (GTK_BOX (hbox3), button1, FALSE, FALSE, 0);  button2 = gtk_button_new_with_label (_("Remove"));  gtk_widget_ref (button2);  gtk_object_set_data_full (GTK_OBJECT (window1), "button2", button2,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (button2);  gtk_box_pack_start (GTK_BOX (hbox3), button2, FALSE, FALSE, 0);  scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);  gtk_widget_ref (scrolledwindow1);  gtk_object_set_data_full (GTK_OBJECT (window1), "scrolledwindow1", scrolledwindow1,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (scrolledwindow1);  gtk_box_pack_start (GTK_BOX (vbox3), scrolledwindow1, TRUE, TRUE, 0);  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);   viewport1 = gtk_viewport_new (NULL, NULL);   gtk_widget_ref (viewport1);   gtk_object_set_data_full (GTK_OBJECT (window1), "viewport1", viewport1,			     (GtkDestroyNotify) gtk_widget_unref);   gtk_widget_show (viewport1);   gtk_container_add (GTK_CONTAINER (scrolledwindow1), viewport1);      scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL);   gtk_widget_ref (scrolledwindow2);   gtk_object_set_data_full (GTK_OBJECT (window1), "scrolledwindow2", scrolledwindow2,			     (GtkDestroyNotify) gtk_widget_unref);   gtk_widget_show (scrolledwindow2);   gtk_container_add (GTK_CONTAINER (viewport1), scrolledwindow2);   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow2), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);      clist1 = gtk_clist_new (2);   gtk_widget_ref (clist1);   gtk_object_set_data_full (GTK_OBJECT (window1), "clist1", clist1,			     (GtkDestroyNotify) gtk_widget_unref);   gtk_widget_show (clist1);   gtk_container_add (GTK_CONTAINER (scrolledwindow2), clist1);   gtk_clist_set_column_width (GTK_CLIST (clist1), 0, 20);   gtk_clist_set_column_width (GTK_CLIST (clist1), 1, 80);   gtk_clist_column_titles_show (GTK_CLIST (clist1));      label2 = gtk_label_new (_("On"));   gtk_widget_ref (label2);   gtk_object_set_data_full (GTK_OBJECT (window1), "label2", label2,			     (GtkDestroyNotify) gtk_widget_unref);   gtk_widget_show (label2);   gtk_clist_set_column_widget (GTK_CLIST (clist1), 0, label2);      label3 = gtk_label_new (_("Address"));   gtk_widget_ref (label3);   gtk_object_set_data_full (GTK_OBJECT (window1), "label3", label3,			     (GtkDestroyNotify) gtk_widget_unref);   gtk_widget_show (label3);   gtk_clist_set_column_widget (GTK_CLIST (clist1), 1, label3);        hseparator1 = gtk_hseparator_new ();  gtk_widget_ref (hseparator1);  gtk_object_set_data_full (GTK_OBJECT (window1), "hseparator1", hseparator1,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (hseparator1);  gtk_box_pack_start (GTK_BOX (vbox3), hseparator1, FALSE, TRUE, 3);  hbox4 = gtk_hbox_new (TRUE, 0);  gtk_widget_ref (hbox4);  gtk_object_set_data_full (GTK_OBJECT (window1), "hbox4", hbox4,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (hbox4);  gtk_box_pack_start (GTK_BOX (vbox3), hbox4, FALSE, FALSE, 0);  button3 = gtk_button_new_with_label (_("Refresh List"));  gtk_widget_ref (button3);  gtk_object_set_data_full (GTK_OBJECT (window1), "button3", button3,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (button3);  gtk_box_pack_start (GTK_BOX (hbox4), button3, FALSE, FALSE, 0);      popup_dlg = create_incoming_popup();   online_dlg = create_online_popup();      /*     * initial registration    */   registerme(NULL);   /*    * Tell the server I'm around every 60 seconds.    */   gtk_timeout_add((UPDATETIME * 1000),registerme,NULL);   /*    * Add callbacks for udp input and dsp i/o    */   gdk_input_add(udpsocket, GDK_INPUT_READ, udp_message_callback, NULL);   /*    * Don't add callbacks for the dsp yet, only when it's been opened.    */   gtk_signal_connect(GTK_OBJECT(clist1), "select_row",		      GTK_SIGNAL_FUNC(addressBookEntrySelected),		      entry1);      gtk_signal_connect(GTK_OBJECT(entry1), "activate",		      GTK_SIGNAL_FUNC(acceptTypedData),		      entry1);   gtk_signal_connect(GTK_OBJECT(button5), "clicked",		      GTK_SIGNAL_FUNC(acceptTypedData),		      entry1);   gtk_signal_connect(GTK_OBJECT(button1), "clicked",		      GTK_SIGNAL_FUNC(addToList),		      entry1);   gtk_signal_connect(GTK_OBJECT(button2), "clicked",		      GTK_SIGNAL_FUNC(delFromList),		      entry1);   gtk_signal_connect(GTK_OBJECT(button3), "clicked",		      GTK_SIGNAL_FUNC(buttonUpdateClist),		      entry1);   gtk_signal_connect (GTK_OBJECT (window1), "delete_event",			GTK_SIGNAL_FUNC (endProgram), NULL);      return window1;}void udp_message_callback(gpointer data,gint source,GdkInputCondition condition ) {   int size=getmsg(0);   if(size>0) {      //		      printf ("received control input\n");      userprocessmsg(&sender,mesg,size);   }}void incoming_dsp_callback(gpointer data,gint source,GdkInputCondition condition ) {   int size,i;   static int samplesin = 0;   if (!havedsp) {      return;   }   size=read(sndin,sndblock1+samplesin,sndblocksize);   if(connected && size>0) {      totalread+=size;      samplesin+=size;      i=0;      while(samplesin-i>=block160size) {	 loudcount+=checkloud(sndblock1+i);	 pack160to33(packed+12+packedin*33,sndblock1+i);	 i+=block160size;	 ++packedin;	 if(packedin==PACKETSTOPACK) {	    long now;	    now=gtime2();	    packed[0]=CODE_SOUND;	    packed[1]=outcount>>16;	    packed[2]=outcount>>8;	    packed[3]=outcount;	    packed[4]=now>>24;	    packed[5]=now>>16;	    packed[6]=now>>8;	    packed[7]=now;	    packed[8]=lastdiff>>24;	    packed[9]=lastdiff>>16;	    packed[10]=lastdiff>>8;	    packed[11]=lastdiff;	    ++outcount;	    putmsg(&buddy,packed,12+PACKETSTOPACK*33);	    	    packedin=0;	    loudcount=0;	 }      }      if(i) {	 samplesin-=i;	 memcpy(sndblock1,sndblock1+i,samplesin);      }   }}void outgoing_dsp_callback(gpointer data,gint source,GdkInputCondition condition ) {   if (!havedsp) {      return;   }   if(writein>=sndblocksize*(MAXBLOCKS+1)) {      while(writein>=sndblocksize<<1) {	 writein-=sndblocksize;	 writetake+=sndblocksize;	 if(writetake==writelimit) {	    writetake=writefifo;	 }      }   }   write(sndin,writetake,sndblocksize);   totalwritten+=sndblocksize;      writein-=sndblocksize;   writetake+=sndblocksize;   if(writetake==writelimit) {      writetake=writefifo;   }}main(int argc,char *argv[]){   int size,pid,result,port;   long nexttime,t;   fd_set inputs,outputs;   struct timeval timeout;   char typed[256];   int samplesin;   int i,j;   char *s;   GtkWidget * mainWindow;   unsigned char *p;   gtk_init (&argc, &argv);   userInfo = CreateBucket("---",0);//	cchandler(0);   inittime();   srand(timebase);   myiplen=getmyip(myip);   if(myiplen<0) {      printf("Failed to determine local IP address, code %d\n",myiplen);      return -60;   }   scanrcfile(0);   if(!findalias("me"))     addalias("me",username);   for(i=0;i<KEYSIZE;++i)     if(mykey[i]) break;   if(i==KEYSIZE) {      printf("WARNING:You haven't specificied your password in the PHONERC file.\n");      printf("Pretty much nothing will work without that password. Visit the site\n");      printf("   http://www.linuxmotors.com/phone\n");      printf("and follow the link there to get a password assigned.\n");   }   computehash(myhash,username);   havedsp=0;   dropDspHandles();   initinputcompression();   initoutputcompression();      i=opendsp();   if(i) {      printf("Failed to open dsp for test, code %d\n",i);   }   closedsp();   if(!openserver(SERVER,PORT))     {	printf("Failed to resolve server %s\n",s);	exit(2);     }   getsocket(0);      exitflag=0;   loudcount=0;   samplesin=0;   connected=0;   gottalk=0;   nexttime=gtime();   talktries=-1;   mainWindow = create_gui_main(udpsocket);   gtk_widget_show(mainWindow);   updateList(NULL);   gtk_main();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -