Changeset 6122
- Timestamp:
- 09/20/08 22:12:42 (4 months ago)
- Files:
-
- branches/P7/wired/run/wired.xml (modified) (10 diffs)
- branches/P7/wired/wired/accounts.c (modified) (10 diffs)
- branches/P7/wired/wired/accounts.h (modified) (1 diff)
- branches/P7/wired/wired/banlist.c (modified) (3 diffs)
- branches/P7/wired/wired/banlist.h (modified) (1 diff)
- branches/P7/wired/wired/messages.c (modified) (14 diffs)
- branches/P7/wired/wired/server.c (modified) (1 diff)
- branches/P7/wired/wired/settings.c (modified) (4 diffs)
- branches/P7/wired/wired/wired.conf.in (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/P7/wired/run/wired.xml
r5867 r6122 4 4 xsi:schemaLocation="http://www.zankasoftware.com/P7/Specification p7.xsd" 5 5 name="Wired" 6 version="2.0b 3">6 version="2.0b4"> 7 7 <p7:fields> 8 8 <p7:field name="wired.transaction" type="uint32" id="1000" /> … … 14 14 <p7:enum name="wired.error.message_out_of_sequence" value="3" /> 15 15 <p7:enum name="wired.error.login_failed" value="4" /> 16 <p7:enum name="wired.error.banned" value="5" /> 17 <p7:enum name="wired.error.permission_denied" value="6" /> 18 <p7:enum name="wired.error.chat_not_found" value="7" /> 19 <p7:enum name="wired.error.user_not_found" value="8" /> 20 <p7:enum name="wired.error.user_cannot_be_disconnected" value="9" /> 21 <p7:enum name="wired.error.file_not_found" value="10" /> 22 <p7:enum name="wired.error.file_exists" value="11" /> 23 <p7:enum name="wired.error.account_not_found" value="12" /> 24 <p7:enum name="wired.error.account_exists" value="13" /> 25 <p7:enum name="wired.error.tracker_not_enabled" value="14" /> 16 <p7:enum name="wired.error.permission_denied" value="5" /> 17 <p7:enum name="wired.error.chat_not_found" value="6" /> 18 <p7:enum name="wired.error.user_not_found" value="7" /> 19 <p7:enum name="wired.error.user_cannot_be_disconnected" value="8" /> 20 <p7:enum name="wired.error.file_not_found" value="9" /> 21 <p7:enum name="wired.error.file_exists" value="10" /> 22 <p7:enum name="wired.error.account_not_found" value="11" /> 23 <p7:enum name="wired.error.account_exists" value="12" /> 24 <p7:enum name="wired.error.tracker_not_enabled" value="13" /> 25 <p7:enum name="wired.error.ban_not_found" value="14" /> 26 <p7:enum name="wired.error.ban_exists" value="15" /> 26 27 </p7:field> 27 28 … … 161 162 <p7:field name="wired.account.settings.get_settings" type="bool" id="8052" /> 162 163 <p7:field name="wired.account.settings.set_settings" type="bool" id="8053" /> 163 <p7:field name="wired.account.tracker.list_servers" type="bool" id="8054" /> 164 <p7:field name="wired.account.tracker.register_servers" type="bool" id="8055" /> 164 <p7:field name="wired.account.banlist.get_bans" type="bool" id="8054" /> 165 <p7:field name="wired.account.banlist.add_bans" type="bool" id="8055" /> 166 <p7:field name="wired.account.banlist.delete_bans" type="bool" id="8056" /> 167 <p7:field name="wired.account.tracker.list_servers" type="bool" id="8057" /> 168 <p7:field name="wired.account.tracker.register_servers" type="bool" id="8058" /> 165 169 166 170 <p7:field name="wired.transfer.type" type="enum" id="9000"> … … 184 188 <p7:field name="wired.settings.register_with_trackers" type="bool" id="10003" /> 185 189 <p7:field name="wired.settings.trackers" type="list" listtype="string" id="10004" /> 190 <p7:field name="wired.banlist.ip" type="string" id="10005" /> 191 <p7:field name="wired.banlist.expiration_date" type="date" id="10006" /> 186 192 187 193 <p7:field name="wired.tracker.tracker" type="bool" id="11000" /> … … 279 285 <p7:member field="wired.account.settings.get_settings" /> 280 286 <p7:member field="wired.account.settings.set_settings" /> 287 <p7:member field="wired.account.banlist.get_bans" /> 288 <p7:member field="wired.account.banlist.add_bans" /> 289 <p7:member field="wired.account.banlist.delete_bans" /> 281 290 <p7:member field="wired.account.tracker.list_servers" /> 282 291 <p7:member field="wired.account.tracker.register_servers" /> … … 308 317 <p7:parameter field="wired.transaction" /> 309 318 <p7:parameter field="wired.user.id" use="required" /> 319 </p7:message> 320 321 <p7:message name="wired.banned" id="1005"> 322 <p7:parameter field="wired.transaction" /> 323 <p7:parameter field="wired.banlist.expiration_date" /> 310 324 </p7:message> 311 325 … … 489 503 <p7:parameter field="wired.user.id" use="required" /> 490 504 <p7:parameter field="wired.user.disconnect_message" use="required" /> 505 <p7:parameter field="wired.banlist.expiration_date" /> 491 506 </p7:message> 492 507 … … 878 893 </p7:message> 879 894 895 <p7:message name="wired.banlist.get_bans" id="10006"> 896 <p7:parameter field="wired.transaction" /> 897 </p7:message> 898 899 <p7:message name="wired.banlist.ban_list" id="10007"> 900 <p7:parameter field="wired.transaction" /> 901 <p7:parameter field="wired.banlist.ip" use="required" /> 902 <p7:parameter field="wired.banlist.expiration_date" /> 903 </p7:message> 904 905 <p7:message name="wired.banlist.ban_list.done" id="10008"> 906 <p7:parameter field="wired.transaction" /> 907 </p7:message> 908 909 <p7:message name="wired.banlist.add_ban" id="10009"> 910 <p7:parameter field="wired.transaction" /> 911 <p7:parameter field="wired.banlist.ip" use="required" /> 912 <p7:parameter field="wired.banlist.expiration_date" /> 913 </p7:message> 914 915 <p7:message name="wired.banlist.delete_ban" id="10010"> 916 <p7:parameter field="wired.transaction" /> 917 <p7:parameter field="wired.banlist.ip" use="required" /> 918 <p7:parameter field="wired.banlist.expiration_date" /> 919 </p7:message> 920 880 921 <p7:message name="wired.tracker.get_categories" id="11000"> 881 922 <p7:parameter field="wired.transaction" /> … … 948 989 </p7:and> 949 990 <p7:reply message="wired.error" count="1" use="required" /> 991 <p7:reply message="wired.banned" count="1" use="required" /> 950 992 </p7:or> 951 993 </p7:transaction> … … 1202 1244 <p7:reply message="wired.error" count="1" use="required" /> 1203 1245 </p7:or> 1246 </p7:transaction> 1247 1248 <p7:transaction message="wired.banlist.get_bans" originator="client"> 1249 <p7:or> 1250 <p7:and> 1251 <p7:reply message="wired.banlist.ban_list" count="*" use="required" /> 1252 <p7:reply message="wired.banlist.ban_list.done" count="1" use="required" /> 1253 </p7:and> 1254 <p7:reply message="wired.error" count="1" use="required" /> 1255 </p7:or> 1256 </p7:transaction> 1257 1258 <p7:transaction message="wired.banlist.add_ban" originator="client"> 1259 <p7:reply message="wired.error" count="?" use="required" /> 1260 </p7:transaction> 1261 1262 <p7:transaction message="wired.banlist.delete_ban" originator="client"> 1263 <p7:reply message="wired.error" count="?" use="required" /> 1204 1264 </p7:transaction> 1205 1265 branches/P7/wired/wired/accounts.c
r5867 r6122 724 724 account->settings_get_settings = wd_account_next_bool(array, false, &i); 725 725 account->settings_set_settings = wd_account_next_bool(array, false, &i); 726 account->banlist_get_bans = wd_account_next_bool(array, false, &i); 727 account->banlist_add_bans = wd_account_next_bool(array, false, &i); 728 account->banlist_delete_bans = wd_account_next_bool(array, false, &i); 726 729 account->tracker_list_servers = wd_account_next_bool(array, false, &i); 727 730 account->tracker_register_servers = wd_account_next_bool(array, false, &i); … … 792 795 account->settings_get_settings = wd_account_next_bool(array, false, &i); 793 796 account->settings_set_settings = wd_account_next_bool(array, false, &i); 797 account->banlist_get_bans = wd_account_next_bool(array, false, &i); 798 account->banlist_add_bans = wd_account_next_bool(array, false, &i); 799 account->banlist_delete_bans = wd_account_next_bool(array, false, &i); 794 800 account->tracker_list_servers = wd_account_next_bool(array, false, &i); 795 801 account->tracker_register_servers = wd_account_next_bool(array, false, &i); … … 934 940 WD_ACCOUNT_GET_BOOL(&account->settings_get_settings, WI_STR("wired.account.settings.get_settings")); 935 941 WD_ACCOUNT_GET_BOOL(&account->settings_set_settings, WI_STR("wired.account.settings.set_settings")); 942 WD_ACCOUNT_GET_BOOL(&account->banlist_get_bans, WI_STR("wired.account.banlist.get_bans")); 943 WD_ACCOUNT_GET_BOOL(&account->banlist_add_bans, WI_STR("wired.account.banlist.add_bans")); 944 WD_ACCOUNT_GET_BOOL(&account->banlist_delete_bans, WI_STR("wired.account.banlist.delete_bans")); 936 945 WD_ACCOUNT_GET_BOOL(&account->tracker_list_servers, WI_STR("wired.account.tracker.list_servers")); 937 946 WD_ACCOUNT_GET_BOOL(&account->tracker_register_servers, WI_STR("wired.account.tracker.register_servers")); … … 999 1008 WD_ACCOUNT_SET_BOOL(account->settings_get_settings, WI_STR("wired.account.settings.get_settings")); 1000 1009 WD_ACCOUNT_SET_BOOL(account->settings_set_settings, WI_STR("wired.account.settings.set_settings")); 1010 WD_ACCOUNT_SET_BOOL(account->banlist_get_bans, WI_STR("wired.account.banlist.get_bans")); 1011 WD_ACCOUNT_SET_BOOL(account->banlist_add_bans, WI_STR("wired.account.banlist.add_bans")); 1012 WD_ACCOUNT_SET_BOOL(account->banlist_delete_bans, WI_STR("wired.account.banlist.delete_bans")); 1001 1013 WD_ACCOUNT_SET_BOOL(account->tracker_list_servers, WI_STR("wired.account.tracker.list_servers")); 1002 1014 WD_ACCOUNT_SET_BOOL(account->tracker_register_servers, WI_STR("wired.account.tracker.register_servers")); … … 1004 1016 1005 1017 1018 1019 #define WD_ACCOUNT_ADD_BOOL(value) \ 1020 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), (value))) 1006 1021 1007 1022 static wi_array_t * wd_account_user_array(wd_account_t *account) { … … 1012 1027 wi_array_add_data(array, account->password); 1013 1028 wi_array_add_data(array, account->group); 1014 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->user_get_info));1015 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->message_broadcast));1016 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->news_post_news));1017 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->news_clear_news));1018 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->transfer_download_files));1019 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->transfer_upload_files));1020 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->transfer_upload_anywhere));1021 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_create_directories));1022 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_move_files));1023 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_delete_files));1024 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_access_all_dropboxes));1025 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->account_create_accounts));1026 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->account_edit_accounts));1027 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->account_delete_accounts));1028 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->account_raise_account_privileges));1029 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->user_kick_users));1030 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->user_ban_users));1031 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->user_cannot_be_disconnected));1032 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->transfer_download_speed_limit));1033 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->transfer_upload_speed_limit));1034 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->transfer_download_limit));1035 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->transfer_upload_limit));1036 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->chat_set_topic));1029 WD_ACCOUNT_ADD_BOOL(account->user_get_info); 1030 WD_ACCOUNT_ADD_BOOL(account->message_broadcast); 1031 WD_ACCOUNT_ADD_BOOL(account->news_post_news); 1032 WD_ACCOUNT_ADD_BOOL(account->news_clear_news); 1033 WD_ACCOUNT_ADD_BOOL(account->transfer_download_files); 1034 WD_ACCOUNT_ADD_BOOL(account->transfer_upload_files); 1035 WD_ACCOUNT_ADD_BOOL(account->transfer_upload_anywhere); 1036 WD_ACCOUNT_ADD_BOOL(account->file_create_directories); 1037 WD_ACCOUNT_ADD_BOOL(account->file_move_files); 1038 WD_ACCOUNT_ADD_BOOL(account->file_delete_files); 1039 WD_ACCOUNT_ADD_BOOL(account->file_access_all_dropboxes); 1040 WD_ACCOUNT_ADD_BOOL(account->account_create_accounts); 1041 WD_ACCOUNT_ADD_BOOL(account->account_edit_accounts); 1042 WD_ACCOUNT_ADD_BOOL(account->account_delete_accounts); 1043 WD_ACCOUNT_ADD_BOOL(account->account_raise_account_privileges); 1044 WD_ACCOUNT_ADD_BOOL(account->user_kick_users); 1045 WD_ACCOUNT_ADD_BOOL(account->user_ban_users); 1046 WD_ACCOUNT_ADD_BOOL(account->user_cannot_be_disconnected); 1047 WD_ACCOUNT_ADD_BOOL(account->transfer_download_speed_limit); 1048 WD_ACCOUNT_ADD_BOOL(account->transfer_upload_speed_limit); 1049 WD_ACCOUNT_ADD_BOOL(account->transfer_download_limit); 1050 WD_ACCOUNT_ADD_BOOL(account->transfer_upload_limit); 1051 WD_ACCOUNT_ADD_BOOL(account->chat_set_topic); 1037 1052 wi_array_add_data(array, account->files); 1038 1053 wi_array_add_data(array, account->full_name); … … 1045 1060 wi_array_add_data(array, account->edited_by); 1046 1061 wi_array_add_data(array, wi_array_components_joined_by_string(account->groups, WI_STR(","))); 1047 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->chat_create_chats)); 1048 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->message_send_messages)); 1049 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->news_read_news)); 1050 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_list_files)); 1051 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_get_info)); 1052 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_create_links)); 1053 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_rename_files)); 1054 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_set_type)); 1055 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_set_comment)); 1056 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_set_permissions)); 1057 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_set_executable)); 1058 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_recursive_list_depth_limit)); 1059 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->transfer_upload_directories)); 1060 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->account_change_password)); 1061 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->account_list_accounts)); 1062 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->account_read_accounts)); 1063 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->user_cannot_set_nick)); 1064 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->user_get_users)); 1065 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->log_view_log)); 1066 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->settings_get_settings)); 1067 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->settings_set_settings)); 1068 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->tracker_list_servers)); 1069 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->tracker_register_servers)); 1062 WD_ACCOUNT_ADD_BOOL(account->chat_create_chats); 1063 WD_ACCOUNT_ADD_BOOL(account->message_send_messages); 1064 WD_ACCOUNT_ADD_BOOL(account->news_read_news); 1065 WD_ACCOUNT_ADD_BOOL(account->file_list_files); 1066 WD_ACCOUNT_ADD_BOOL(account->file_get_info); 1067 WD_ACCOUNT_ADD_BOOL(account->file_create_links); 1068 WD_ACCOUNT_ADD_BOOL(account->file_rename_files); 1069 WD_ACCOUNT_ADD_BOOL(account->file_set_type); 1070 WD_ACCOUNT_ADD_BOOL(account->file_set_comment); 1071 WD_ACCOUNT_ADD_BOOL(account->file_set_permissions); 1072 WD_ACCOUNT_ADD_BOOL(account->file_set_executable); 1073 WD_ACCOUNT_ADD_BOOL(account->file_recursive_list_depth_limit); 1074 WD_ACCOUNT_ADD_BOOL(account->transfer_upload_directories); 1075 WD_ACCOUNT_ADD_BOOL(account->account_change_password); 1076 WD_ACCOUNT_ADD_BOOL(account->account_list_accounts); 1077 WD_ACCOUNT_ADD_BOOL(account->account_read_accounts); 1078 WD_ACCOUNT_ADD_BOOL(account->user_cannot_set_nick); 1079 WD_ACCOUNT_ADD_BOOL(account->user_get_users); 1080 WD_ACCOUNT_ADD_BOOL(account->log_view_log); 1081 WD_ACCOUNT_ADD_BOOL(account->settings_get_settings); 1082 WD_ACCOUNT_ADD_BOOL(account->settings_set_settings); 1083 WD_ACCOUNT_ADD_BOOL(account->banlist_get_bans); 1084 WD_ACCOUNT_ADD_BOOL(account->banlist_add_bans); 1085 WD_ACCOUNT_ADD_BOOL(account->banlist_delete_bans); 1086 WD_ACCOUNT_ADD_BOOL(account->tracker_list_servers); 1087 WD_ACCOUNT_ADD_BOOL(account->tracker_register_servers); 1070 1088 1071 1089 return array; … … 1080 1098 1081 1099 wi_array_add_data(array, account->name); 1082 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->user_get_info));1083 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->message_broadcast));1084 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->news_post_news));1085 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->news_clear_news));1086 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->transfer_download_files));1087 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->transfer_upload_files));1088 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->transfer_upload_anywhere));1089 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_create_directories));1090 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_move_files));1091 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_delete_files));1092 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_access_all_dropboxes));1093 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->account_create_accounts));1094 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->account_edit_accounts));1095 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->account_delete_accounts));1096 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->account_raise_account_privileges));1097 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->user_kick_users));1098 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->user_ban_users));1099 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->user_cannot_be_disconnected));1100 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->transfer_download_speed_limit));1101 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->transfer_upload_speed_limit));1102 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->transfer_download_limit));1103 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->transfer_upload_limit));1104 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->chat_set_topic));1100 WD_ACCOUNT_ADD_BOOL(account->user_get_info); 1101 WD_ACCOUNT_ADD_BOOL(account->message_broadcast); 1102 WD_ACCOUNT_ADD_BOOL(account->news_post_news); 1103 WD_ACCOUNT_ADD_BOOL(account->news_clear_news); 1104 WD_ACCOUNT_ADD_BOOL(account->transfer_download_files); 1105 WD_ACCOUNT_ADD_BOOL(account->transfer_upload_files); 1106 WD_ACCOUNT_ADD_BOOL(account->transfer_upload_anywhere); 1107 WD_ACCOUNT_ADD_BOOL(account->file_create_directories); 1108 WD_ACCOUNT_ADD_BOOL(account->file_move_files); 1109 WD_ACCOUNT_ADD_BOOL(account->file_delete_files); 1110 WD_ACCOUNT_ADD_BOOL(account->file_access_all_dropboxes); 1111 WD_ACCOUNT_ADD_BOOL(account->account_create_accounts); 1112 WD_ACCOUNT_ADD_BOOL(account->account_edit_accounts); 1113 WD_ACCOUNT_ADD_BOOL(account->account_delete_accounts); 1114 WD_ACCOUNT_ADD_BOOL(account->account_raise_account_privileges); 1115 WD_ACCOUNT_ADD_BOOL(account->user_kick_users); 1116 WD_ACCOUNT_ADD_BOOL(account->user_ban_users); 1117 WD_ACCOUNT_ADD_BOOL(account->user_cannot_be_disconnected); 1118 WD_ACCOUNT_ADD_BOOL(account->transfer_download_speed_limit); 1119 WD_ACCOUNT_ADD_BOOL(account->transfer_upload_speed_limit); 1120 WD_ACCOUNT_ADD_BOOL(account->transfer_download_limit); 1121 WD_ACCOUNT_ADD_BOOL(account->transfer_upload_limit); 1122 WD_ACCOUNT_ADD_BOOL(account->chat_set_topic); 1105 1123 wi_array_add_data(array, account->files); 1106 1124 wi_array_add_data(array, wi_string_by_replacing_string_with_string(wi_date_rfc3339_string(account->creation_time), … … 1109 1127 WI_STR(":"), WI_STR(";"), 0)); 1110 1128 wi_array_add_data(array, account->edited_by); 1111 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->chat_create_chats)); 1112 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->message_send_messages)); 1113 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->news_read_news)); 1114 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_list_files)); 1115 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_get_info)); 1116 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_create_links)); 1117 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_rename_files)); 1118 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_set_type)); 1119 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_set_comment)); 1120 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_set_permissions)); 1121 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_set_executable)); 1122 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->file_recursive_list_depth_limit)); 1123 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->transfer_upload_directories)); 1124 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->account_change_password)); 1125 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->account_list_accounts)); 1126 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->account_read_accounts)); 1127 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->user_cannot_set_nick)); 1128 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->user_get_users)); 1129 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->log_view_log)); 1130 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->settings_get_settings)); 1131 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->settings_set_settings)); 1132 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->tracker_list_servers)); 1133 wi_array_add_data(array, wi_string_with_format(WI_STR("%u"), account->tracker_register_servers)); 1129 WD_ACCOUNT_ADD_BOOL(account->chat_create_chats); 1130 WD_ACCOUNT_ADD_BOOL(account->message_send_messages); 1131 WD_ACCOUNT_ADD_BOOL(account->news_read_news); 1132 WD_ACCOUNT_ADD_BOOL(account->file_list_files); 1133 WD_ACCOUNT_ADD_BOOL(account->file_get_info); 1134 WD_ACCOUNT_ADD_BOOL(account->file_create_links); 1135 WD_ACCOUNT_ADD_BOOL(account->file_rename_files); 1136 WD_ACCOUNT_ADD_BOOL(account->file_set_type); 1137 WD_ACCOUNT_ADD_BOOL(account->file_set_comment); 1138 WD_ACCOUNT_ADD_BOOL(account->file_set_permissions); 1139 WD_ACCOUNT_ADD_BOOL(account->file_set_executable); 1140 WD_ACCOUNT_ADD_BOOL(account->file_recursive_list_depth_limit); 1141 WD_ACCOUNT_ADD_BOOL(account->transfer_upload_directories); 1142 WD_ACCOUNT_ADD_BOOL(account->account_change_password); 1143 WD_ACCOUNT_ADD_BOOL(account->account_list_accounts); 1144 WD_ACCOUNT_ADD_BOOL(account->account_read_accounts); 1145 WD_ACCOUNT_ADD_BOOL(account->user_cannot_set_nick); 1146 WD_ACCOUNT_ADD_BOOL(account->user_get_users); 1147 WD_ACCOUNT_ADD_BOOL(account->log_view_log); 1148 WD_ACCOUNT_ADD_BOOL(account->settings_get_settings); 1149 WD_ACCOUNT_ADD_BOOL(account->settings_set_settings); 1150 WD_ACCOUNT_ADD_BOOL(account->banlist_get_bans); 1151 WD_ACCOUNT_ADD_BOOL(account->banlist_add_bans); 1152 WD_ACCOUNT_ADD_BOOL(account->banlist_delete_bans); 1153 WD_ACCOUNT_ADD_BOOL(account->tracker_list_servers); 1154 WD_ACCOUNT_ADD_BOOL(account->tracker_register_servers); 1134 1155 1135 1156 return array; … … 1242 1263 if(account->settings_get_settings && !user_account->settings_get_settings) return false; 1243 1264 if(account->settings_set_settings && !user_account->settings_set_settings) return false; 1265 if(account->banlist_get_bans && !user_account->banlist_get_bans) return false; 1266 if(account->banlist_add_bans && !user_account->banlist_add_bans) return false; 1267 if(account->banlist_delete_bans && !user_account->banlist_delete_bans) return false; 1244 1268 if(account->tracker_list_servers && !user_account->tracker_list_servers) return false; 1245 1269 if(account->tracker_register_servers && !user_account->tracker_register_servers) return false; branches/P7/wired/wired/accounts.h
r5853 r6122 91 91 wi_boolean_t settings_get_settings; 92 92 wi_boolean_t settings_set_settings; 93 wi_boolean_t banlist_get_bans; 94 wi_boolean_t banlist_add_bans; 95 wi_boolean_t banlist_delete_bans; 93 96 wi_boolean_t tracker_list_servers; 94 97 wi_boolean_t tracker_register_servers; branches/P7/wired/wired/banlist.c
r5841 r6122 32 32 33 33 #include "banlist.h" 34 #include "server.h" 34 35 #include "settings.h" 35 36 36 #define WD_TEMPBAN_BAN_TIME 1800.0 37 38 39 struct _wd_tempban { 37 struct _wd_ban { 40 38 wi_runtime_base_t base; 41 39 42 40 wi_string_t *ip; 43 wi_time_interval_t interval; 41 wi_date_t *expiration_date; 42 44 43 wi_timer_t *timer; 45 44 }; 46 typedef struct _wd_tempban wd_tempban_t; 47 48 49 static wd_tempban_t * wd_tempban_with_ip(wi_string_t *); 50 static wd_tempban_t * wd_tempban_alloc(void); 51 static wd_tempban_t * wd_tempban_init_with_ip(wd_tempban_t *, wi_string_t *); 52 static void wd_tempban_dealloc(wi_runtime_instance_t *); 53 static wi_string_t * wd_tempban_description(wi_runtime_instance_t *); 54 55 static void wd_tempban_expire_timer(wi_timer_t *); 56 57 45 typedef struct _wd_ban wd_ban_t; 46 47 48 static wi_boolean_t wd_banlist_file_contains_ip(wi_file_t *, wi_string_t *); 49 static wi_boolean_t wd_banlist_delete_ban_from_file(wi_file_t *, wi_string_t *); 50 51 static wd_ban_t * wd_ban_alloc(void); 52 static wd_ban_t * wd_ban_init_with_ip(wd_ban_t *, wi_string_t *, wi_date_t *); 53 static void wd_ban_dealloc(wi_runtime_instance_t *); 54 static wi_string_t * wd_ban_description(wi_runtime_instance_t *); 55 56 static void wd_ban_expire_timer(wi_timer_t *); 57 58 59 static wi_rwlock_t *wd_banlist_lock; 58 60 static wi_string_t *wd_banlist_path; 59 static wi_dictionary_t *wd_ tempbans;60 61 static wi_runtime_id_t wd_ tempban_runtime_id = WI_RUNTIME_ID_NULL;62 static wi_runtime_class_t wd_ tempban_runtime_class = {63 "wd_ tempban_t",64 wd_ tempban_dealloc,61 static wi_dictionary_t *wd_bans; 62 63 static wi_runtime_id_t wd_ban_runtime_id = WI_RUNTIME_ID_NULL; 64 static wi_runtime_class_t wd_ban_runtime_class = { 65 "wd_ban_t", 66 wd_ban_dealloc, 65 67 NULL, 66 68 NULL, 67 wd_ tempban_description,69 wd_ban_description, 68 70 NULL 69 71 }; … … 71 73 72 74 void wd_banlist_init(void) { 73 wd_ tempban_runtime_id = wi_runtime_register_class(&wd_tempban_runtime_class);75 wd_ban_runtime_id = wi_runtime_register_class(&wd_ban_runtime_class); 74 76 75 77 wd_banlist_path = WI_STR("banlist"); 76 77 wd_tempbans = wi_dictionary_init(wi_dictionary_alloc()); 78 } 79 80 81 82 #pragma mark - 83 84 wi_boolean_t wd_banlist_ip_is_banned(wi_string_t *ip) { 78 wd_banlist_lock = wi_rwlock_init(wi_rwlock_alloc()); 79 80 wd_bans = wi_dictionary_init(wi_dictionary_alloc()); 81 } 82 83 84 85 #pragma mark - 86 87 wi_boolean_t wd_banlist_ip_is_banned(wi_string_t *ip, wi_date_t **expiration_date) { 88 wi_file_t *file; 89 wd_ban_t *ban; 90 wi_boolean_t banned = false; 91 92 wi_dictionary_rdlock(wd_bans); 93 ban = wi_autorelease(wi_retain(wi_dictionary_data_for_key(wd_bans, ip))); 94 wi_dictionary_unlock(wd_bans); 95 96 if(ban) { 97 *expiration_date = ban->expiration_date; 98 99 return true; 100 } 101 102 wi_rwlock_rdlock(wd_banlist_lock); 103 104 file = wi_file_for_reading(wd_banlist_path); 105 106 if(file) 107 banned = wd_banlist_file_contains_ip(file, ip); 108 else 109 wi_log_err(WI_STR("Could not open %@: %m"), wd_banlist_path); 110 111 wi_rwlock_unlock(wd_banlist_lock); 112 113 *expiration_date = NULL; 114 115 return banned; 116 } 117 118 119 120 #pragma mark - 121 122 void wd_banlist_reply_bans(wd_user_t *user, wi_p7_message_t *message) { 123 wi_p7_message_t *reply; 124 wi_enumerator_t *enumerator; 85 125 wi_file_t *file; 86 126 wi_string_t *string; 87 wi_boolean_t banned = false; 88 89 wi_dictionary_rdlock(wd_tempbans); 90 banned = (wi_dictionary_data_for_key(wd_tempbans, ip) != NULL); 91 wi_dictionary_unlock(wd_tempbans); 92 93 if(banned) 94 return banned; 95 127 wd_ban_t *ban; 128 129 wi_rwlock_rdlock(wd_banlist_lock); 130 96 131 file = wi_file_for_reading(wd_banlist_path); 97 132 … … 100 135 } else { 101 136 while((string = wi_file_read_config_line(file))) { 102 if(wi_ip_matches_string(ip, string)) { 103 banned = true; 104 105 break; 137 reply = wi_p7_message_with_name(WI_STR("wired.banlist.ban_list"), wd_p7_spec); 138 wi_p7_message_set_string_for_name(reply, string, WI_STR("wired.banlist.ip")); 139 wd_user_reply_message(user, reply, message); 140 } 141 } 142 143 wi_rwlock_unlock(wd_banlist_lock); 144 145 wi_dictionary_rdlock(wd_bans); 146 147 enumerator = wi_dictionary_data_enumerator(wd_bans); 148 149 while((ban = wi_enumerator_next_data(enumerator))) { 150 reply = wi_p7_message_with_name(WI_STR("wired.banlist.ban_list"), wd_p7_spec); 151 wi_p7_message_set_string_for_name(reply, ban->ip, WI_STR("wired.banlist.ip")); 152 wi_p7_message_set_date_for_name(reply, ban->expiration_date, WI_STR("wired.banlist.expiration_date")); 153 wd_user_reply_message(user, reply, message); 154 } 155 156 wi_dictionary_unlock(wd_bans); 157 158 reply = wi_p7_message_with_name(WI_STR("wired.banlist.ban_list.done"), wd_p7_spec); 159 wd_user_reply_message(user, reply, message); 160 } 161 162 163 164 void wd_banlist_add_ban(wd_user_t *user, wi_p7_message_t *message, wi_string_t *ip, wi_date_t *expiration_date) { 165 wi_file_t *file; 166 wd_ban_t *ban; 167 168 if(expiration_date) { 169 if(wi_date_time_interval(expiration_date) - wi_time_interval() > 1.0) { 170 wi_dictionary_wrlock(wd_bans); 171 172 if(!wi_dictionary_contains_key(wd_bans, ip)) { 173 ban = wd_ban_init_with_ip(wd_ban_alloc(), ip, expiration_date); 174 wi_timer_schedule(ban->timer); 175 wi_dictionary_set_data_for_key(wd_bans, ban, ip); 176 wi_release(ban); 177 } else { 178 wd_user_reply_error(user, WI_STR("wired.error.ban_exists"), message); 106 179 } 107 } 108 } 109 110 return banned; 111 } 112 113 114 115 void wd_banlist_add_temporary_ban_for_ip(wi_string_t *ip) { 116 wd_tempban_t *tempban; 117 118 tempban = wd_tempban_with_ip(ip); 119 tempban->timer = wi_timer_init_with_function(wi_timer_alloc(), 120 wd_tempban_expire_timer, 121 WD_TEMPBAN_BAN_TIME, 122 false); 123 124 wi_timer_set_data(tempban->timer, tempban); 125 wi_timer_schedule(tempban->timer); 126 127 wi_dictionary_wrlock(wd_tempbans); 128 wi_dictionary_set_data_for_key(wd_tempbans, tempban, tempban->ip); 129 wi_dictionary_unlock(wd_tempbans); 130 } 131 132 133 134 #pragma mark - 135 136 static wd_tempban_t * wd_tempban_with_ip(wi_string_t *ip) { 137 return wi_autorelease(wd_tempban_init_with_ip(wd_tempban_alloc(), ip)); 138 } 139 140 141 142 static wd_tempban_t * wd_tempban_alloc(void) { 143 return wi_runtime_create_instance(wd_tempban_runtime_id, sizeof(wd_tempban_t)); 144 } 145 146 147 148 static wd_tempban_t * wd_tempban_init_with_ip(wd_tempban_t *tempban, wi_string_t *ip) { 149 tempban->ip = wi_retain(ip); 150 tempban->interval = wi_time_interval(); 151 152 return tempban; 153 } 154 155 156 157 static void wd_tempban_dealloc(wi_runtime_instance_t *instance) { 158 wd_tempban_t *tempban = instance; 159 160 wi_release(tempban->ip); 161 wi_release(tempban->timer); 162 } 163 164 165 166 static wi_string_t * wd_tempban_description(wi_runtime_instance_t *instance) { 167 wd_tempban_t *tempban = instance; 168 169 return wi_string_with_format(WI_STR("<%@ %p>{ip = %@, time_remaining = %.0f}"), 170 wi_runtime_class_name(tempban), 171 tempban, 172 tempban->ip, 173 wi_time_interval() - tempban->interval); 174 } 175 176 177 178 #pragma mark - 179 180 static void wd_tempban_expire_timer(wi_timer_t *timer) { 181 wd_tempban_t *tempban; 182 183 tempban = wi_timer_data(timer); 184 185 wi_dictionary_rdlock(wd_tempbans); 186 wi_dictionary_remove_data_for_key(wd_tempbans, tempban->ip); 187 wi_dictionary_unlock(wd_tempbans); 188 } 180 181 wi_dictionary_unlock(wd_bans); 182 } else { 183 wi_log_err(WI_STR("Ban has negative expiration date"), wd_banlist_path); 184 wd_user_reply_error(user, WI_STR("wired.error.internal_error"), message); 185 } 186 } else { 187 wi_rwlock_wrlock(wd_banlist_lock); 188 189 file = wi_file_for_updating(wd_banlist_path); 190 191 if(file) { 192 if(!wd_banlist_file_contains_ip(file, ip)) 193 wi_file_write_format(file, WI_STR("%@\n"), ip); 194 else 195 wd_user_reply_error(user, WI_STR("wired.error.ban_exists"), message); 196 } else { 197 wi_log_err(WI_STR("Could not open %@: %m"), wd_banlist_path); 198 wd_user_reply_error(user, WI_STR("wired.error.internal_error"), message); 199 } 200 201 wi_rwlock_unlock(wd_banlist_lock); 202 } 203 } 204 205 206 207 void wd_banlist_delete_ban(wd_user_t *user, wi_p7_message_t *message, wi_string_t *ip, wi_date_t *expiration_date) { 208 wi_file_t *file; 209 210 if(expiration_date) { 211 wi_dictionary_wrlock(wd_bans); 212 213 if(wi_dictionary_contains_key(wd_bans, ip)) 214 wi_dictionary_remove_data_for_key(wd_bans, ip); 215 else 216 wd_user_reply_error(user, WI_STR("wired.error.ban_not_found"), message); 217 218 wi_dictionary_unlock(wd_bans); 219 } else { 220 wi_rwlock_wrlock(wd_banlist_lock); 221 222 file = wi_file_for_updating(wd_banlist_path); 223 224 if(file) { 225 if(!wd_banlist_delete_ban_from_file(file, ip)) 226 wd_user_reply_error(user, WI_STR("wired.error.ban_not_found"), message); 227 } else { 228 wi_log_err(WI_STR("Could not open %@: %m"), wd_banlist_path); 229 wd_user_reply_error(user, WI_STR("wired.error.internal_error"), message); 230 } 231 232 wi_rwlock_unlock(wd_banlist_lock); 233 } 234 } 235 236 237 238 #pragma mark - 239 240 static wi_boolean_t wd_banlist_file_contains_ip(wi_file_t *file, wi_string_t *ip) { 241 wi_string_t *string; 242 243 while((string = wi_file_read_config_line(file))) { 244 if(wi_ip_matches_string(ip, string)) 245 return true; 246 } 247 248 return false; 249 } 250 251 252 253 static wi_boolean_t wd_banlist_delete_ban_from_file(wi_file_t *file, wi_string_t *ip) { 254 wi_file_t *tmpfile; 255 wi_string_t *string; 256 wi_boolean_t result = false; 257 258 tmpfile = wi_file_temporary_file(); 259 260 if(!tmpfile) { 261 wi_log_err(WI_STR("Could not create a temporary file: %m")); 262 263 return false; 264 } 265
