| 644 msg = g_strdup(_("Unknown Error")); |
672 msg = g_strdup(_("Unknown Error")); |
| 645 |
673 |
| 646 purple_notify_error(NULL, _("Registration Failed"), |
674 purple_notify_error(NULL, _("Registration Failed"), |
| 647 _("Registration Failed"), msg); |
675 _("Registration Failed"), msg); |
| 648 g_free(msg); |
676 g_free(msg); |
| 649 } |
677 if(account->registration_cb) |
| 650 jabber_connection_schedule_close(js); |
678 (account->registration_cb)(account, FALSE, account->registration_cb_user_data); |
| |
679 } |
| |
680 g_free(to); |
| |
681 if(js->registration) |
| |
682 jabber_connection_schedule_close(js); |
| 651 } |
683 } |
| 652 |
684 |
| 653 static void |
685 static void |
| 654 jabber_register_cb(JabberStream *js, PurpleRequestFields *fields) |
686 jabber_unregistration_result_cb(JabberStream *js, xmlnode *packet, gpointer data) |
| |
687 { |
| |
688 const char *type = xmlnode_get_attrib(packet, "type"); |
| |
689 char *buf; |
| |
690 char *to = data; |
| |
691 |
| |
692 if(!strcmp(type, "result")) { |
| |
693 buf = g_strdup_printf(_("Registration from %s successfully removed"), |
| |
694 to); |
| |
695 purple_notify_info(NULL, _("Unregistration Successful"), |
| |
696 _("Unregistration Successful"), buf); |
| |
697 g_free(buf); |
| |
698 } else { |
| |
699 char *msg = jabber_parse_error(js, packet); |
| |
700 |
| |
701 if(!msg) |
| |
702 msg = g_strdup(_("Unknown Error")); |
| |
703 |
| |
704 purple_notify_error(NULL, _("Unregistration Failed"), |
| |
705 _("Unregistration Failed"), msg); |
| |
706 g_free(msg); |
| |
707 } |
| |
708 g_free(to); |
| |
709 } |
| |
710 |
| |
711 typedef struct _JabberRegisterCBData { |
| |
712 JabberStream *js; |
| |
713 char *who; |
| |
714 } JabberRegisterCBData; |
| |
715 |
| |
716 static void |
| |
717 jabber_register_cb(JabberRegisterCBData *cbdata, PurpleRequestFields *fields) |
| 655 { |
718 { |
| 656 GList *groups, *flds; |
719 GList *groups, *flds; |
| 657 xmlnode *query, *y; |
720 xmlnode *query, *y; |
| 658 JabberIq *iq; |
721 JabberIq *iq; |
| 659 char *username; |
722 char *username; |
| 660 |
723 |
| 661 iq = jabber_iq_new_query(js, JABBER_IQ_SET, "jabber:iq:register"); |
724 iq = jabber_iq_new_query(cbdata->js, JABBER_IQ_SET, "jabber:iq:register"); |
| 662 query = xmlnode_get_child(iq->node, "query"); |
725 query = xmlnode_get_child(iq->node, "query"); |
| |
726 xmlnode_set_attrib(iq->node,"to",cbdata->who); |
| 663 |
727 |
| 664 for(groups = purple_request_fields_get_groups(fields); groups; |
728 for(groups = purple_request_fields_get_groups(fields); groups; |
| 665 groups = groups->next) { |
729 groups = groups->next) { |
| 666 for(flds = purple_request_field_group_get_fields(groups->data); |
730 for(flds = purple_request_field_group_get_fields(groups->data); |
| 667 flds; flds = flds->next) { |
731 flds; flds = flds->next) { |
| 668 PurpleRequestField *field = flds->data; |
732 PurpleRequestField *field = flds->data; |
| 669 const char *id = purple_request_field_get_id(field); |
733 const char *id = purple_request_field_get_id(field); |
| 670 const char *value = purple_request_field_string_get_value(field); |
734 if(!strcmp(id,"unregister")) { |
| 671 |
735 gboolean value = purple_request_field_bool_get_value(field); |
| 672 if(!strcmp(id, "username")) { |
736 if(value) { |
| 673 y = xmlnode_new_child(query, "username"); |
737 /* unregister from service. this doesn't include any of the fields, so remove them from the stanza by recreating it |
| 674 } else if(!strcmp(id, "password")) { |
738 (there's no "remove child" function for xmlnode) */ |
| 675 y = xmlnode_new_child(query, "password"); |
739 jabber_iq_free(iq); |
| 676 } else if(!strcmp(id, "name")) { |
740 iq = jabber_iq_new_query(cbdata->js, JABBER_IQ_SET, "jabber:iq:register"); |
| 677 y = xmlnode_new_child(query, "name"); |
741 query = xmlnode_get_child(iq->node, "query"); |
| 678 } else if(!strcmp(id, "email")) { |
742 xmlnode_set_attrib(iq->node,"to",cbdata->who); |
| 679 y = xmlnode_new_child(query, "email"); |
743 xmlnode_new_child(query, "remove"); |
| 680 } else if(!strcmp(id, "nick")) { |
744 |
| 681 y = xmlnode_new_child(query, "nick"); |
745 jabber_iq_set_callback(iq, jabber_unregistration_result_cb, cbdata->who); |
| 682 } else if(!strcmp(id, "first")) { |
746 |
| 683 y = xmlnode_new_child(query, "first"); |
747 jabber_iq_send(iq); |
| 684 } else if(!strcmp(id, "last")) { |
748 g_free(cbdata); |
| 685 y = xmlnode_new_child(query, "last"); |
749 return; |
| 686 } else if(!strcmp(id, "address")) { |
750 } |
| 687 y = xmlnode_new_child(query, "address"); |
|
| 688 } else if(!strcmp(id, "city")) { |
|
| 689 y = xmlnode_new_child(query, "city"); |
|
| 690 } else if(!strcmp(id, "state")) { |
|
| 691 y = xmlnode_new_child(query, "state"); |
|
| 692 } else if(!strcmp(id, "zip")) { |
|
| 693 y = xmlnode_new_child(query, "zip"); |
|
| 694 } else if(!strcmp(id, "phone")) { |
|
| 695 y = xmlnode_new_child(query, "phone"); |
|
| 696 } else if(!strcmp(id, "url")) { |
|
| 697 y = xmlnode_new_child(query, "url"); |
|
| 698 } else if(!strcmp(id, "date")) { |
|
| 699 y = xmlnode_new_child(query, "date"); |
|
| 700 } else { |
751 } else { |
| 701 continue; |
752 const char *value = purple_request_field_string_get_value(field); |
| |
753 |
| |
754 if(!strcmp(id, "username")) { |
| |
755 y = xmlnode_new_child(query, "username"); |
| |
756 } else if(!strcmp(id, "password")) { |
| |
757 y = xmlnode_new_child(query, "password"); |
| |
758 } else if(!strcmp(id, "name")) { |
| |
759 y = xmlnode_new_child(query, "name"); |
| |
760 } else if(!strcmp(id, "email")) { |
| |
761 y = xmlnode_new_child(query, "email"); |
| |
762 } else if(!strcmp(id, "nick")) { |
| |
763 y = xmlnode_new_child(query, "nick"); |
| |
764 } else if(!strcmp(id, "first")) { |
| |
765 y = xmlnode_new_child(query, "first"); |
| |
766 } else if(!strcmp(id, "last")) { |
| |
767 y = xmlnode_new_child(query, "last"); |
| |
768 } else if(!strcmp(id, "address")) { |
| |
769 y = xmlnode_new_child(query, "address"); |
| |
770 } else if(!strcmp(id, "city")) { |
| |
771 y = xmlnode_new_child(query, "city"); |
| |
772 } else if(!strcmp(id, "state")) { |
| |
773 y = xmlnode_new_child(query, "state"); |
| |
774 } else if(!strcmp(id, "zip")) { |
| |
775 y = xmlnode_new_child(query, "zip"); |
| |
776 } else if(!strcmp(id, "phone")) { |
| |
777 y = xmlnode_new_child(query, "phone"); |
| |
778 } else if(!strcmp(id, "url")) { |
| |
779 y = xmlnode_new_child(query, "url"); |
| |
780 } else if(!strcmp(id, "date")) { |
| |
781 y = xmlnode_new_child(query, "date"); |
| |
782 } else { |
| |
783 continue; |
| |
784 } |
| |
785 xmlnode_insert_data(y, value, -1); |
| |
786 if(cbdata->js->registration && !strcmp(id, "username")) { |
| |
787 if(cbdata->js->user->node) |
| |
788 g_free(cbdata->js->user->node); |
| |
789 cbdata->js->user->node = g_strdup(value); |
| |
790 } |
| |
791 if(cbdata->js->registration && !strcmp(id, "password")) |
| |
792 purple_account_set_password(cbdata->js->gc->account, value); |
| 702 } |
793 } |
| 703 xmlnode_insert_data(y, value, -1); |
794 } |
| 704 if(!strcmp(id, "username")) { |
795 } |
| 705 if(js->user->node) |
796 |
| 706 g_free(js->user->node); |
797 if(cbdata->js->registration) { |
| 707 js->user->node = g_strdup(value); |
798 username = g_strdup_printf("%s@%s/%s", cbdata->js->user->node, cbdata->js->user->domain, |
| 708 } |
799 cbdata->js->user->resource); |
| 709 } |
800 purple_account_set_username(cbdata->js->gc->account, username); |
| 710 } |
801 g_free(username); |
| 711 |
802 } |
| 712 username = g_strdup_printf("%s@%s/%s", js->user->node, js->user->domain, |
803 |
| 713 js->user->resource); |
804 jabber_iq_set_callback(iq, jabber_registration_result_cb, cbdata->who); |
| 714 purple_account_set_username(js->gc->account, username); |
|
| 715 g_free(username); |
|
| 716 |
|
| 717 jabber_iq_set_callback(iq, jabber_registration_result_cb, NULL); |
|
| 718 |
805 |
| 719 jabber_iq_send(iq); |
806 jabber_iq_send(iq); |
| 720 |
807 g_free(cbdata); |
| 721 } |
808 } |
| 722 |
809 |
| 723 static void |
810 static void |
| 724 jabber_register_cancel_cb(JabberStream *js, PurpleRequestFields *fields) |
811 jabber_register_cancel_cb(JabberRegisterCBData *cbdata, PurpleRequestFields *fields) |
| 725 { |
812 { |
| 726 jabber_connection_schedule_close(js); |
813 PurpleAccount *account = purple_connection_get_account(cbdata->js->gc); |
| |
814 if(account && cbdata->js->registration) { |
| |
815 if(account->registration_cb) |
| |
816 (account->registration_cb)(account, FALSE, account->registration_cb_user_data); |
| |
817 jabber_connection_schedule_close(cbdata->js); |
| |
818 } |
| |
819 g_free(cbdata->who); |
| |
820 g_free(cbdata); |
| 727 } |
821 } |
| 728 |
822 |
| 729 static void jabber_register_x_data_cb(JabberStream *js, xmlnode *result, gpointer data) |
823 static void jabber_register_x_data_cb(JabberStream *js, xmlnode *result, gpointer data) |
| 730 { |
824 { |
| 731 xmlnode *query; |
825 xmlnode *query; |
| 732 JabberIq *iq; |
826 JabberIq *iq; |
| |
827 char *to = data; |
| 733 |
828 |
| 734 iq = jabber_iq_new_query(js, JABBER_IQ_SET, "jabber:iq:register"); |
829 iq = jabber_iq_new_query(js, JABBER_IQ_SET, "jabber:iq:register"); |
| 735 query = xmlnode_get_child(iq->node, "query"); |
830 query = xmlnode_get_child(iq->node, "query"); |
| |
831 xmlnode_set_attrib(iq->node,"to",to); |
| 736 |
832 |
| 737 xmlnode_insert_child(query, result); |
833 xmlnode_insert_child(query, result); |
| 738 |
834 |
| 739 jabber_iq_set_callback(iq, jabber_registration_result_cb, NULL); |
835 jabber_iq_set_callback(iq, jabber_registration_result_cb, to); |
| 740 jabber_iq_send(iq); |
836 jabber_iq_send(iq); |
| 741 } |
837 } |
| 742 |
838 |
| 743 void jabber_register_parse(JabberStream *js, xmlnode *packet) |
839 void jabber_register_parse(JabberStream *js, xmlnode *packet) |
| 744 { |
840 { |
| |
841 PurpleAccount *account = purple_connection_get_account(js->gc); |
| 745 const char *type; |
842 const char *type; |
| |
843 const char *from = xmlnode_get_attrib(packet, "from"); |
| |
844 PurpleRequestFields *fields; |
| |
845 PurpleRequestFieldGroup *group; |
| |
846 PurpleRequestField *field; |
| |
847 xmlnode *query, *x, *y; |
| |
848 char *instructions; |
| |
849 JabberRegisterCBData *cbdata; |
| |
850 gboolean registered = FALSE; |
| |
851 |
| 746 if(!(type = xmlnode_get_attrib(packet, "type")) || strcmp(type, "result")) |
852 if(!(type = xmlnode_get_attrib(packet, "type")) || strcmp(type, "result")) |
| 747 return; |
853 return; |
| 748 |
854 |
| 749 if(js->registration) { |
855 if(js->registration) |
| 750 PurpleRequestFields *fields; |
|
| 751 PurpleRequestFieldGroup *group; |
|
| 752 PurpleRequestField *field; |
|
| 753 xmlnode *query, *x, *y; |
|
| 754 char *instructions; |
|
| 755 |
|
| 756 /* get rid of the login thingy */ |
856 /* get rid of the login thingy */ |
| 757 purple_connection_set_state(js->gc, PURPLE_CONNECTED); |
857 purple_connection_set_state(js->gc, PURPLE_CONNECTED); |
| 758 |
858 |
| 759 query = xmlnode_get_child(packet, "query"); |
859 query = xmlnode_get_child(packet, "query"); |
| 760 |
860 |
| 761 if(xmlnode_get_child(query, "registered")) { |
861 if(xmlnode_get_child(query, "registered")) { |
| |
862 registered = TRUE; |
| |
863 |
| |
864 if(js->registration) { |
| 762 purple_notify_error(NULL, _("Already Registered"), |
865 purple_notify_error(NULL, _("Already Registered"), |
| 763 _("Already Registered"), NULL); |
866 _("Already Registered"), NULL); |
| |
867 if(account->registration_cb) |
| |
868 (account->registration_cb)(account, FALSE, account->registration_cb_user_data); |
| 764 jabber_connection_schedule_close(js); |
869 jabber_connection_schedule_close(js); |
| 765 return; |
870 return; |
| 766 } |
871 } |
| 767 |
872 } |
| 768 if((x = xmlnode_get_child_with_namespace(packet, "x", |
873 |
| 769 "jabber:x:data"))) { |
874 if((x = xmlnode_get_child_with_namespace(packet, "x", |
| 770 jabber_x_data_request(js, x, jabber_register_x_data_cb, NULL); |
875 "jabber:x:data"))) { |
| 771 return; |
876 jabber_x_data_request(js, x, jabber_register_x_data_cb, g_strdup(from)); |
| 772 } else if((x = xmlnode_get_child_with_namespace(packet, "x", |
877 return; |
| 773 "jabber:x:oob"))) { |
878 } else if((x = xmlnode_get_child_with_namespace(packet, "x", |
| 774 xmlnode *url; |
879 "jabber:x:oob"))) { |
| 775 |
880 xmlnode *url; |
| 776 if((url = xmlnode_get_child(x, "url"))) { |
881 |
| 777 char *href; |
882 if((url = xmlnode_get_child(x, "url"))) { |
| 778 if((href = xmlnode_get_data(url))) { |
883 char *href; |
| 779 purple_notify_uri(NULL, href); |
884 if((href = xmlnode_get_data(url))) { |
| 780 g_free(href); |
885 purple_notify_uri(NULL, href); |
| |
886 g_free(href); |
| |
887 if(js->registration) { |
| 781 js->gc->wants_to_die = TRUE; |
888 js->gc->wants_to_die = TRUE; |
| |
889 if(account->registration_cb) /* succeeded, but we have no login info */ |
| |
890 (account->registration_cb)(account, TRUE, account->registration_cb_user_data); |
| 782 jabber_connection_schedule_close(js); |
891 jabber_connection_schedule_close(js); |
| 783 return; |
|
| 784 } |
892 } |
| |
893 return; |
| 785 } |
894 } |
| 786 } |
895 } |
| 787 |
896 } |
| 788 /* as a last resort, use the old jabber:iq:register syntax */ |
897 |
| 789 |
898 /* as a last resort, use the old jabber:iq:register syntax */ |
| 790 fields = purple_request_fields_new(); |
899 |
| 791 group = purple_request_field_group_new(NULL); |
900 fields = purple_request_fields_new(); |
| 792 purple_request_fields_add_group(fields, group); |
901 group = purple_request_field_group_new(NULL); |
| 793 |
902 purple_request_fields_add_group(fields, group); |
| |
903 |
| |
904 if(js->registration) |
| 794 field = purple_request_field_string_new("username", _("Username"), |
905 field = purple_request_field_string_new("username", _("Username"), |
| 795 js->user->node, FALSE); |
906 js->user->node, FALSE); |
| 796 purple_request_field_group_add_field(group, field); |
907 else |
| 797 |
908 field = purple_request_field_string_new("username", _("Username"), |
| |
909 NULL, FALSE); |
| |
910 |
| |
911 purple_request_field_group_add_field(group, field); |
| |
912 |
| |
913 if(js->registration) |
| 798 field = purple_request_field_string_new("password", _("Password"), |
914 field = purple_request_field_string_new("password", _("Password"), |
| 799 purple_connection_get_password(js->gc), FALSE); |
915 purple_connection_get_password(js->gc), FALSE); |
| 800 purple_request_field_string_set_masked(field, TRUE); |
916 else |
| 801 purple_request_field_group_add_field(group, field); |
917 field = purple_request_field_string_new("password", _("Password"), |
| 802 |
918 NULL, FALSE); |
| 803 if(xmlnode_get_child(query, "name")) { |
919 |
| |
920 purple_request_field_string_set_masked(field, TRUE); |
| |
921 purple_request_field_group_add_field(group, field); |
| |
922 |
| |
923 if(xmlnode_get_child(query, "name")) { |
| |
924 if(js->registration) |
| 804 field = purple_request_field_string_new("name", _("Name"), |
925 field = purple_request_field_string_new("name", _("Name"), |
| 805 purple_account_get_alias(js->gc->account), FALSE); |
926 purple_account_get_alias(js->gc->account), FALSE); |
| 806 purple_request_field_group_add_field(group, field); |
927 else |
| 807 } |
928 field = purple_request_field_string_new("name", _("Name"), |
| 808 if(xmlnode_get_child(query, "email")) { |
|
| 809 field = purple_request_field_string_new("email", _("E-mail"), |
|
| 810 NULL, FALSE); |
929 NULL, FALSE); |
| 811 purple_request_field_group_add_field(group, field); |
930 purple_request_field_group_add_field(group, field); |
| 812 } |
931 } |
| 813 if(xmlnode_get_child(query, "nick")) { |
932 if(xmlnode_get_child(query, "email")) { |
| 814 field = purple_request_field_string_new("nick", _("Nickname"), |
933 field = purple_request_field_string_new("email", _("E-mail"), |
| 815 NULL, FALSE); |
934 NULL, FALSE); |
| 816 purple_request_field_group_add_field(group, field); |
935 purple_request_field_group_add_field(group, field); |
| 817 } |
936 } |
| 818 if(xmlnode_get_child(query, "first")) { |
937 if(xmlnode_get_child(query, "nick")) { |
| 819 field = purple_request_field_string_new("first", _("First name"), |
938 field = purple_request_field_string_new("nick", _("Nickname"), |
| 820 NULL, FALSE); |
939 NULL, FALSE); |
| 821 purple_request_field_group_add_field(group, field); |
940 purple_request_field_group_add_field(group, field); |
| 822 } |
941 } |
| 823 if(xmlnode_get_child(query, "last")) { |
942 if(xmlnode_get_child(query, "first")) { |
| 824 field = purple_request_field_string_new("last", _("Last name"), |
943 field = purple_request_field_string_new("first", _("First name"), |
| 825 NULL, FALSE); |
944 NULL, FALSE); |
| 826 purple_request_field_group_add_field(group, field); |
945 purple_request_field_group_add_field(group, field); |
| 827 } |
946 } |
| 828 if(xmlnode_get_child(query, "address")) { |
947 if(xmlnode_get_child(query, "last")) { |
| 829 field = purple_request_field_string_new("address", _("Address"), |
948 field = purple_request_field_string_new("last", _("Last name"), |
| 830 NULL, FALSE); |
949 NULL, FALSE); |
| 831 purple_request_field_group_add_field(group, field); |
950 purple_request_field_group_add_field(group, field); |
| 832 } |
951 } |
| 833 if(xmlnode_get_child(query, "city")) { |
952 if(xmlnode_get_child(query, "address")) { |
| 834 field = purple_request_field_string_new("city", _("City"), |
953 field = purple_request_field_string_new("address", _("Address"), |
| 835 NULL, FALSE); |
954 NULL, FALSE); |
| 836 purple_request_field_group_add_field(group, field); |
955 purple_request_field_group_add_field(group, field); |
| 837 } |
956 } |
| 838 if(xmlnode_get_child(query, "state")) { |
957 if(xmlnode_get_child(query, "city")) { |
| 839 field = purple_request_field_string_new("state", _("State"), |
958 field = purple_request_field_string_new("city", _("City"), |
| 840 NULL, FALSE); |
959 NULL, FALSE); |
| 841 purple_request_field_group_add_field(group, field); |
960 purple_request_field_group_add_field(group, field); |
| 842 } |
961 } |
| 843 if(xmlnode_get_child(query, "zip")) { |
962 if(xmlnode_get_child(query, "state")) { |
| 844 field = purple_request_field_string_new("zip", _("Postal code"), |
963 field = purple_request_field_string_new("state", _("State"), |
| 845 NULL, FALSE); |
964 NULL, FALSE); |
| 846 purple_request_field_group_add_field(group, field); |
965 purple_request_field_group_add_field(group, field); |
| 847 } |
966 } |
| 848 if(xmlnode_get_child(query, "phone")) { |
967 if(xmlnode_get_child(query, "zip")) { |
| 849 field = purple_request_field_string_new("phone", _("Phone"), |
968 field = purple_request_field_string_new("zip", _("Postal code"), |
| 850 NULL, FALSE); |
969 NULL, FALSE); |
| 851 purple_request_field_group_add_field(group, field); |
970 purple_request_field_group_add_field(group, field); |
| 852 } |
971 } |
| 853 if(xmlnode_get_child(query, "url")) { |
972 if(xmlnode_get_child(query, "phone")) { |
| 854 field = purple_request_field_string_new("url", _("URL"), |
973 field = purple_request_field_string_new("phone", _("Phone"), |
| 855 NULL, FALSE); |
974 NULL, FALSE); |
| 856 purple_request_field_group_add_field(group, field); |
975 purple_request_field_group_add_field(group, field); |
| 857 } |
976 } |
| 858 if(xmlnode_get_child(query, "date")) { |
977 if(xmlnode_get_child(query, "url")) { |
| 859 field = purple_request_field_string_new("date", _("Date"), |
978 field = purple_request_field_string_new("url", _("URL"), |
| 860 NULL, FALSE); |
979 NULL, FALSE); |
| 861 purple_request_field_group_add_field(group, field); |
980 purple_request_field_group_add_field(group, field); |
| 862 } |
981 } |
| 863 |
982 if(xmlnode_get_child(query, "date")) { |
| 864 if((y = xmlnode_get_child(query, "instructions"))) |
983 field = purple_request_field_string_new("date", _("Date"), |
| 865 instructions = xmlnode_get_data(y); |
984 NULL, FALSE); |
| 866 else |
985 purple_request_field_group_add_field(group, field); |
| 867 instructions = g_strdup(_("Please fill out the information below " |
986 } |
| 868 "to register your new account.")); |
987 if(registered) { |
| 869 |
988 field = purple_request_field_bool_new("unregister", _("Unregister"), FALSE); |
| |
989 purple_request_field_group_add_field(group, field); |
| |
990 } |
| |
991 |
| |
992 if((y = xmlnode_get_child(query, "instructions"))) |
| |
993 instructions = xmlnode_get_data(y); |
| |
994 else if(registered) |
| |
995 instructions = g_strdup(_("Please fill out the information below " |
| |
996 "to change your account registration.")); |
| |
997 else |
| |
998 instructions = g_strdup(_("Please fill out the information below " |
| |
999 "to register your new account.")); |
| |
1000 |
| |
1001 cbdata = g_new0(JabberRegisterCBData, 1); |
| |
1002 cbdata->js = js; |
| |
1003 cbdata->who = g_strdup(from); |
| |
1004 |
| |
1005 if(js->registration) |
| 870 purple_request_fields(js->gc, _("Register New XMPP Account"), |
1006 purple_request_fields(js->gc, _("Register New XMPP Account"), |
| 871 _("Register New XMPP Account"), instructions, fields, |
1007 _("Register New XMPP Account"), instructions, fields, |
| 872 _("Register"), G_CALLBACK(jabber_register_cb), |
1008 _("Register"), G_CALLBACK(jabber_register_cb), |
| 873 _("Cancel"), G_CALLBACK(jabber_register_cancel_cb), |
1009 _("Cancel"), G_CALLBACK(jabber_register_cancel_cb), |
| 874 purple_connection_get_account(js->gc), NULL, NULL, |
1010 purple_connection_get_account(js->gc), NULL, NULL, |
| 875 js); |
1011 cbdata); |
| 876 |
1012 else { |
| 877 g_free(instructions); |
1013 char *title = registered?g_strdup_printf(_("Change Account Registration at %s"), from) |
| 878 } |
1014 :g_strdup_printf(_("Register New Account at %s"), from); |
| |
1015 purple_request_fields(js->gc, title, |
| |
1016 title, instructions, fields, |
| |
1017 registered?_("Change Registration"):_("Register"), G_CALLBACK(jabber_register_cb), |
| |
1018 _("Cancel"), G_CALLBACK(jabber_register_cancel_cb), |
| |
1019 purple_connection_get_account(js->gc), NULL, NULL, |
| |
1020 cbdata); |
| |
1021 g_free(title); |
| |
1022 } |
| |
1023 |
| |
1024 g_free(instructions); |
| 879 } |
1025 } |
| 880 |
1026 |
| 881 void jabber_register_start(JabberStream *js) |
1027 void jabber_register_start(JabberStream *js) |
| 882 { |
1028 { |
| 883 JabberIq *iq; |
1029 JabberIq *iq; |
| 884 |
1030 |
| 885 iq = jabber_iq_new_query(js, JABBER_IQ_GET, "jabber:iq:register"); |
1031 iq = jabber_iq_new_query(js, JABBER_IQ_GET, "jabber:iq:register"); |
| |
1032 jabber_iq_send(iq); |
| |
1033 } |
| |
1034 |
| |
1035 void jabber_register_gateway(JabberStream *js, const char *gateway) { |
| |
1036 JabberIq *iq; |
| |
1037 |
| |
1038 iq = jabber_iq_new_query(js, JABBER_IQ_GET, "jabber:iq:register"); |
| |
1039 xmlnode_set_attrib(iq->node, "to", gateway); |
| 886 jabber_iq_send(iq); |
1040 jabber_iq_send(iq); |
| 887 } |
1041 } |
| 888 |
1042 |
| 889 void jabber_register_account(PurpleAccount *account) |
1043 void jabber_register_account(PurpleAccount *account) |
| 890 { |
1044 { |
| 1231 type = purple_status_type_new_with_attrs(PURPLE_STATUS_AVAILABLE, |
1524 type = purple_status_type_new_with_attrs(PURPLE_STATUS_AVAILABLE, |
| 1232 jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_ONLINE), |
1525 jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_ONLINE), |
| 1233 NULL, TRUE, TRUE, FALSE, |
1526 NULL, TRUE, TRUE, FALSE, |
| 1234 "priority", _("Priority"), priority_value, |
1527 "priority", _("Priority"), priority_value, |
| 1235 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), |
1528 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1529 "mood", _("Mood"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1530 "moodtext", _("Mood Text"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1531 "tune_artist", _("Tune Artist"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1532 "tune_title", _("Tune Title"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1533 "tune_album", _("Tune Album"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1534 "tune_genre", _("Tune Genre"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1535 "tune_comment", _("Tune Comment"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1536 "tune_track", _("Tune Track"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1537 "tune_time", _("Tune Time"), purple_value_new(PURPLE_TYPE_INT), |
| |
1538 "tune_year", _("Tune Year"), purple_value_new(PURPLE_TYPE_INT), |
| |
1539 "tune_url", _("Tune URL"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1540 "nick", _("Nickname"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1541 "buzz", _("Allow Buzz"), purple_value_new(PURPLE_TYPE_BOOLEAN), |
| 1236 NULL); |
1542 NULL); |
| 1237 types = g_list_append(types, type); |
1543 types = g_list_append(types, type); |
| 1238 |
1544 |
| 1239 priority_value = purple_value_new(PURPLE_TYPE_INT); |
1545 priority_value = purple_value_new(PURPLE_TYPE_INT); |
| 1240 purple_value_set_int(priority_value, 1); |
1546 purple_value_set_int(priority_value, 1); |
| 1241 type = purple_status_type_new_with_attrs(PURPLE_STATUS_AVAILABLE, |
1547 type = purple_status_type_new_with_attrs(PURPLE_STATUS_AVAILABLE, |
| 1242 jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_CHAT), |
1548 jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_CHAT), |
| 1243 _("Chatty"), TRUE, TRUE, FALSE, |
1549 _("Chatty"), TRUE, TRUE, FALSE, |
| 1244 "priority", _("Priority"), priority_value, |
1550 "priority", _("Priority"), priority_value, |
| 1245 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), |
1551 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1552 "mood", _("Mood"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1553 "moodtext", _("Mood Text"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1554 "tune_artist", _("Tune Artist"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1555 "tune_title", _("Tune Title"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1556 "tune_album", _("Tune Album"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1557 "tune_genre", _("Tune Genre"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1558 "tune_comment", _("Tune Comment"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1559 "tune_track", _("Tune Track"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1560 "tune_time", _("Tune Time"), purple_value_new(PURPLE_TYPE_INT), |
| |
1561 "tune_year", _("Tune Year"), purple_value_new(PURPLE_TYPE_INT), |
| |
1562 "tune_url", _("Tune URL"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1563 "nick", _("Nickname"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1564 "buzz", _("Allow Buzz"), purple_value_new(PURPLE_TYPE_BOOLEAN), |
| 1246 NULL); |
1565 NULL); |
| 1247 types = g_list_append(types, type); |
1566 types = g_list_append(types, type); |
| 1248 |
1567 |
| 1249 priority_value = purple_value_new(PURPLE_TYPE_INT); |
1568 priority_value = purple_value_new(PURPLE_TYPE_INT); |
| 1250 purple_value_set_int(priority_value, 0); |
1569 purple_value_set_int(priority_value, 0); |
| 1251 type = purple_status_type_new_with_attrs(PURPLE_STATUS_AWAY, |
1570 type = purple_status_type_new_with_attrs(PURPLE_STATUS_AWAY, |
| 1252 jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_AWAY), |
1571 jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_AWAY), |
| 1253 NULL, TRUE, TRUE, FALSE, |
1572 NULL, TRUE, TRUE, FALSE, |
| 1254 "priority", _("Priority"), priority_value, |
1573 "priority", _("Priority"), priority_value, |
| 1255 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), |
1574 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1575 "mood", _("Mood"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1576 "moodtext", _("Mood Text"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1577 "tune_artist", _("Tune Artist"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1578 "tune_title", _("Tune Title"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1579 "tune_album", _("Tune Album"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1580 "tune_genre", _("Tune Genre"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1581 "tune_comment", _("Tune Comment"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1582 "tune_track", _("Tune Track"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1583 "tune_time", _("Tune Time"), purple_value_new(PURPLE_TYPE_INT), |
| |
1584 "tune_year", _("Tune Year"), purple_value_new(PURPLE_TYPE_INT), |
| |
1585 "tune_url", _("Tune URL"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1586 "nick", _("Nickname"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1587 "buzz", _("Allow Buzz"), purple_value_new(PURPLE_TYPE_BOOLEAN), |
| 1256 NULL); |
1588 NULL); |
| 1257 types = g_list_append(types, type); |
1589 types = g_list_append(types, type); |
| 1258 |
1590 |
| 1259 priority_value = purple_value_new(PURPLE_TYPE_INT); |
1591 priority_value = purple_value_new(PURPLE_TYPE_INT); |
| 1260 purple_value_set_int(priority_value, 0); |
1592 purple_value_set_int(priority_value, 0); |
| 1261 type = purple_status_type_new_with_attrs(PURPLE_STATUS_EXTENDED_AWAY, |
1593 type = purple_status_type_new_with_attrs(PURPLE_STATUS_EXTENDED_AWAY, |
| 1262 jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_XA), |
1594 jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_XA), |
| 1263 NULL, TRUE, TRUE, FALSE, |
1595 NULL, TRUE, TRUE, FALSE, |
| 1264 "priority", _("Priority"), priority_value, |
1596 "priority", _("Priority"), priority_value, |
| 1265 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), |
1597 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1598 "mood", _("Mood"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1599 "moodtext", _("Mood Text"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1600 "tune_artist", _("Tune Artist"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1601 "tune_title", _("Tune Title"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1602 "tune_album", _("Tune Album"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1603 "tune_genre", _("Tune Genre"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1604 "tune_comment", _("Tune Comment"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1605 "tune_track", _("Tune Track"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1606 "tune_time", _("Tune Time"), purple_value_new(PURPLE_TYPE_INT), |
| |
1607 "tune_year", _("Tune Year"), purple_value_new(PURPLE_TYPE_INT), |
| |
1608 "tune_url", _("Tune URL"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1609 "nick", _("Nickname"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1610 "buzz", _("Allow Buzz"), purple_value_new(PURPLE_TYPE_BOOLEAN), |
| 1266 NULL); |
1611 NULL); |
| 1267 types = g_list_append(types, type); |
1612 types = g_list_append(types, type); |
| 1268 |
1613 |
| 1269 priority_value = purple_value_new(PURPLE_TYPE_INT); |
1614 priority_value = purple_value_new(PURPLE_TYPE_INT); |
| 1270 purple_value_set_int(priority_value, 0); |
1615 purple_value_set_int(priority_value, 0); |
| 1271 type = purple_status_type_new_with_attrs(PURPLE_STATUS_UNAVAILABLE, |
1616 type = purple_status_type_new_with_attrs(PURPLE_STATUS_UNAVAILABLE, |
| 1272 jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_DND), |
1617 jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_DND), |
| 1273 _("Do Not Disturb"), TRUE, TRUE, FALSE, |
1618 _("Do Not Disturb"), TRUE, TRUE, FALSE, |
| 1274 "priority", _("Priority"), priority_value, |
1619 "priority", _("Priority"), priority_value, |
| 1275 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), |
1620 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1621 "mood", _("Mood"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1622 "moodtext", _("Mood Text"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1623 "tune_artist", _("Tune Artist"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1624 "tune_title", _("Tune Title"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1625 "tune_album", _("Tune Album"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1626 "tune_genre", _("Tune Genre"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1627 "tune_comment", _("Tune Comment"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1628 "tune_track", _("Tune Track"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1629 "tune_time", _("Tune Time"), purple_value_new(PURPLE_TYPE_INT), |
| |
1630 "tune_year", _("Tune Year"), purple_value_new(PURPLE_TYPE_INT), |
| |
1631 "tune_url", _("Tune URL"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1632 "nick", _("Nickname"), purple_value_new(PURPLE_TYPE_STRING), |
| |
1633 "buzz", _("Allow Buzz"), purple_value_new(PURPLE_TYPE_BOOLEAN), |
| 1276 NULL); |
1634 NULL); |
| 1277 types = g_list_append(types, type); |
1635 types = g_list_append(types, type); |
| 1278 |
1636 |
| 1279 /* |
1637 /* |
| 1280 if(js->protocol_version == JABBER_PROTO_0_9) |
1638 if(js->protocol_version == JABBER_PROTO_0_9) |
| 1798 |
2166 |
| 1799 g_free(who); |
2167 g_free(who); |
| 1800 return PURPLE_CMD_RET_OK; |
2168 return PURPLE_CMD_RET_OK; |
| 1801 } |
2169 } |
| 1802 |
2170 |
| |
2171 static PurpleCmdRet jabber_cmd_ping(PurpleConversation *conv, |
| |
2172 const char *cmd, char **args, char **error, void *data) |
| |
2173 { |
| |
2174 if(!args || !args[0]) |
| |
2175 return PURPLE_CMD_RET_FAILED; |
| |
2176 |
| |
2177 if(!jabber_ping_jid(conv, args[0])) { |
| |
2178 *error = g_strdup_printf(_("Unable to ping user %s"), args[0]); |
| |
2179 return PURPLE_CMD_RET_FAILED; |
| |
2180 } |
| |
2181 |
| |
2182 return PURPLE_CMD_RET_OK; |
| |
2183 } |
| |
2184 |
| |
2185 static PurpleCmdRet jabber_cmd_buzz(PurpleConversation *conv, |
| |
2186 const char *cmd, char **args, char **error, void *data) |
| |
2187 { |
| |
2188 JabberStream *js = conv->account->gc->proto_data; |
| |
2189 xmlnode *msg, *buzz; |
| |
2190 JabberBuddy *jb; |
| |
2191 JabberBuddyResource *jbr; |
| |
2192 char *to; |
| |
2193 GList *iter; |
| |
2194 |
| |
2195 if(!args || !args[0]) |
| |
2196 return PURPLE_CMD_RET_FAILED; |
| |
2197 |
| |
2198 jb = jabber_buddy_find(js, args[0], FALSE); |
| |
2199 if(!jb) { |
| |
2200 *error = g_strdup_printf(_("Unable to buzz, because there is nothing known about user %s."), args[0]); |
| |
2201 return PURPLE_CMD_RET_FAILED; |
| |
2202 } |
| |
2203 |
| |
2204 jbr = jabber_buddy_find_resource(jb, NULL); |
| |
2205 if(!jbr) { |
| |
2206 *error = g_strdup_printf(_("Unable to buzz, because user %s might be offline."), args[0]); |
| |
2207 return PURPLE_CMD_RET_FAILED; |
| |
2208 } |
| |
2209 if(!jbr->caps) { |
| |
2210 *error = g_strdup_printf(_("Unable to buzz, because there is nothing known about user %s."), args[0]); |
| |
2211 return PURPLE_CMD_RET_FAILED; |
| |
2212 } |
| |
2213 for(iter = jbr->caps->features; iter; iter = g_list_next(iter)) { |
| |
2214 if(!strcmp(iter->data, "http://www.xmpp.org/extensions/xep-0224.html#ns")) { |
| |
2215 msg = xmlnode_new("message"); |
| |
2216 to = g_strdup_printf("%s/%s", args[0], jbr->name); |
| |
2217 xmlnode_set_attrib(msg,"to",to); |
| |
2218 g_free(to); |
| |
2219 |
| |
2220 /* avoid offline storage */ |
| |
2221 xmlnode_set_attrib(msg,"type","headline"); |
| |
2222 |
| |
2223 buzz = xmlnode_new_child(msg,"attention"); |
| |
2224 xmlnode_set_namespace(buzz,"http://www.xmpp.org/extensions/xep-0224.html#ns"); |
| |
2225 |
| |
2226 jabber_send(js,msg); |
| |
2227 xmlnode_free(msg); |
| |
2228 |
| |
2229 return PURPLE_CMD_RET_OK; |
| |
2230 } |
| |
2231 } |
| |
2232 *error = g_strdup_printf(_("Unable to buzz, because the user %s does not support it."), args[0]); |
| |
2233 return PURPLE_CMD_RET_FAILED; |
| |
2234 } |
| |
2235 |
| 1803 gboolean jabber_offline_message(const PurpleBuddy *buddy) |
2236 gboolean jabber_offline_message(const PurpleBuddy *buddy) |
| 1804 { |
2237 { |
| 1805 return TRUE; |
2238 return TRUE; |
| 1806 } |
2239 } |
| 1807 |
2240 |
| 1808 void jabber_register_commands(void) |
2241 void jabber_register_commands(void) |
| 1809 { |
2242 { |
| 1810 purple_cmd_register("config", "", PURPLE_CMD_P_PRPL, |
2243 purple_cmd_register("config", "", PURPLE_CMD_P_PRPL, |
| 1811 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, |
2244 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, |
| 1812 "prpl-jabber", jabber_cmd_chat_config, |
2245 "prpl-jabber", jabber_cmd_chat_config, |
| 1813 _("config: Configure a chat room."), NULL); |
2246 _("config: Configure a chat room."), NULL); |
| 1814 purple_cmd_register("configure", "", PURPLE_CMD_P_PRPL, |
2247 purple_cmd_register("configure", "", PURPLE_CMD_P_PRPL, |
| 1815 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, |
2248 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, |
| 1816 "prpl-jabber", jabber_cmd_chat_config, |
2249 "prpl-jabber", jabber_cmd_chat_config, |
| 1817 _("configure: Configure a chat room."), NULL); |
2250 _("configure: Configure a chat room."), NULL); |
| 1818 purple_cmd_register("nick", "s", PURPLE_CMD_P_PRPL, |
2251 purple_cmd_register("nick", "s", PURPLE_CMD_P_PRPL, |
| 1819 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, |
2252 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, |
| 1820 "prpl-jabber", jabber_cmd_chat_nick, |
2253 "prpl-jabber", jabber_cmd_chat_nick, |
| 1821 _("nick <new nickname>: Change your nickname."), |
2254 _("nick <new nickname>: Change your nickname."), |
| 1822 NULL); |
2255 NULL); |
| 1823 purple_cmd_register("part", "s", PURPLE_CMD_P_PRPL, |
2256 purple_cmd_register("part", "s", PURPLE_CMD_P_PRPL, |
| 1824 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | |
2257 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | |
| 1825 PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-jabber", |
2258 PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-jabber", |
| 1826 jabber_cmd_chat_part, _("part [room]: Leave the room."), |
2259 jabber_cmd_chat_part, _("part [room]: Leave the room."), |
| 1827 NULL); |
2260 NULL); |
| 1828 purple_cmd_register("register", "", PURPLE_CMD_P_PRPL, |
2261 purple_cmd_register("register", "", PURPLE_CMD_P_PRPL, |
| 1829 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, |
2262 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, |
| 1830 "prpl-jabber", jabber_cmd_chat_register, |
2263 "prpl-jabber", jabber_cmd_chat_register, |
| 1831 _("register: Register with a chat room."), NULL); |
2264 _("register: Register with a chat room."), NULL); |
| 1832 /* XXX: there needs to be a core /topic cmd, methinks */ |
2265 /* XXX: there needs to be a core /topic cmd, methinks */ |
| 1833 purple_cmd_register("topic", "s", PURPLE_CMD_P_PRPL, |
2266 purple_cmd_register("topic", "s", PURPLE_CMD_P_PRPL, |
| 1834 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | |
2267 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | |
| 1835 PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-jabber", |
2268 PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-jabber", |
| 1836 jabber_cmd_chat_topic, |
2269 jabber_cmd_chat_topic, |
| 1837 _("topic [new topic]: View or change the topic."), |
2270 _("topic [new topic]: View or change the topic."), |
| 1838 NULL); |
2271 NULL); |
| 1839 purple_cmd_register("ban", "ws", PURPLE_CMD_P_PRPL, |
2272 purple_cmd_register("ban", "ws", PURPLE_CMD_P_PRPL, |
| 1840 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | |
2273 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | |
| 1841 PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-jabber", |
2274 PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-jabber", |
| 1842 jabber_cmd_chat_ban, |
2275 jabber_cmd_chat_ban, |
| 1843 _("ban <user> [room]: Ban a user from the room."), |
2276 _("ban <user> [room]: Ban a user from the room."), |
| 1844 NULL); |
2277 NULL); |
| 1845 purple_cmd_register("affiliate", "ws", PURPLE_CMD_P_PRPL, |
2278 purple_cmd_register("affiliate", "ws", PURPLE_CMD_P_PRPL, |
| 1846 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | |
2279 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | |
| 1847 PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-jabber", |
2280 PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-jabber", |
| 1848 jabber_cmd_chat_affiliate, |
2281 jabber_cmd_chat_affiliate, |
| 1849 _("affiliate <user> <owner|admin|member|outcast|none>: Set a user's affiliation with the room."), |
2282 _("affiliate <user> <owner|admin|member|outcast|none>: Set a user's affiliation with the room."), |
| 1850 NULL); |
2283 NULL); |
| 1851 purple_cmd_register("role", "ws", PURPLE_CMD_P_PRPL, |
2284 purple_cmd_register("role", "ws", PURPLE_CMD_P_PRPL, |
| 1852 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | |
2285 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | |
| 1853 PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-jabber", |
2286 PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-jabber", |
| 1854 jabber_cmd_chat_role, |
2287 jabber_cmd_chat_role, |
| 1855 _("role <user> <moderator|participant|visitor|none>: Set a user's role in the room."), |
2288 _("role <user> <moderator|participant|visitor|none>: Set a user's role in the room."), |
| 1856 NULL); |
2289 NULL); |
| 1857 purple_cmd_register("invite", "ws", PURPLE_CMD_P_PRPL, |
2290 purple_cmd_register("invite", "ws", PURPLE_CMD_P_PRPL, |
| 1858 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | |
2291 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | |
| 1859 PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-jabber", |
2292 PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-jabber", |
| 1860 jabber_cmd_chat_invite, |
2293 jabber_cmd_chat_invite, |
| 1861 _("invite <user> [message]: Invite a user to the room."), |
2294 _("invite <user> [message]: Invite a user to the room."), |
| 1862 NULL); |
2295 NULL); |
| 1863 purple_cmd_register("join", "ws", PURPLE_CMD_P_PRPL, |
2296 purple_cmd_register("join", "ws", PURPLE_CMD_P_PRPL, |
| 1864 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | |
2297 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | |
| 1865 PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-jabber", |
2298 PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-jabber", |
| 1866 jabber_cmd_chat_join, |
2299 jabber_cmd_chat_join, |
| 1867 _("join: <room> [server]: Join a chat on this server."), |
2300 _("join: <room> [server]: Join a chat on this server."), |
| 1868 NULL); |
2301 NULL); |
| 1869 purple_cmd_register("kick", "ws", PURPLE_CMD_P_PRPL, |
2302 purple_cmd_register("kick", "ws", PURPLE_CMD_P_PRPL, |
| 1870 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | |
2303 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY | |
| 1871 PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-jabber", |
2304 PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-jabber", |
| 1872 jabber_cmd_chat_kick, |
2305 jabber_cmd_chat_kick, |
| 1873 _("kick <user> [room]: Kick a user from the room."), |
2306 _("kick <user> [room]: Kick a user from the room."), |
| 1874 NULL); |
2307 NULL); |
| 1875 purple_cmd_register("msg", "ws", PURPLE_CMD_P_PRPL, |
2308 purple_cmd_register("msg", "ws", PURPLE_CMD_P_PRPL, |
| 1876 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, |
2309 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, |
| 1877 "prpl-jabber", jabber_cmd_chat_msg, |
2310 "prpl-jabber", jabber_cmd_chat_msg, |
| 1878 _("msg <user> <message>: Send a private message to another user."), |
2311 _("msg <user> <message>: Send a private message to another user."), |
| 1879 NULL); |
2312 NULL); |
| |
2313 purple_cmd_register("ping", "w", PURPLE_CMD_P_PRPL, |
| |
2314 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_IM | |
| |
2315 PURPLE_CMD_FLAG_PRPL_ONLY, |
| |
2316 "prpl-jabber", jabber_cmd_ping, |
| |
2317 _("ping <jid>: Ping a user/component/server."), |
| |
2318 NULL); |
| |
2319 purple_cmd_register("buzz", "s", PURPLE_CMD_P_PRPL, |
| |
2320 PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_PRPL_ONLY, |
| |
2321 "prpl-jabber", jabber_cmd_buzz, |
| |
2322 _("buzz: Buzz a user to get their attention"), NULL); |
| 1880 } |
2323 } |
| 1881 |
2324 |
| 1882 void |
2325 void |
| 1883 jabber_init_plugin(PurplePlugin *plugin) |
2326 jabber_init_plugin(PurplePlugin *plugin) |
| 1884 { |
2327 { |
| 1885 my_protocol = plugin; |
2328 my_protocol = plugin; |
| 1886 } |
2329 } |