3 * Copyright (C) 2007, Rus V. Brushkoff, All rights reserved.
10 Fl_Preferences prefs(Fl_Preferences::USER, "Harbour", "Sfinx");
12 bool faraon_app::process_requests()
14 if (sfinx.read_packet()) {
15 log("faraon:process", "Error reading sfinx request");
19 while ((el = sfinx.rx_elements.next())) {
21 case SFINX_NOTES_MODULE_EDIT_REQUEST:
22 ui()->notes_module_edit((sfinx_note_t *)el);
24 // case SFINX_NOTES_MODULE_TREE:
25 // ui()->fill_notes_tree((sfinx_slice_vector_t *)el);
26 // notes.copy((sfinx_slice_vector_t *)el);
28 case SFINX_ELEMENT_SEARCH_RESULT:
29 ui()->search_browser((sfinx_pair_vector_t *)el);
31 case SFINX_FILES_MODULE_EDIT_REQUEST:
32 ui()->files_module_edit((sfinx_file_t *)el);
35 ui()->alert((sfinx_string_t *)el);
37 case SFINX_NOTES_MODULE_ADD_REPLY:
38 ui()->notes_module_add_reply((sfinx_string_t *)el);
40 case SFINX_FILES_MODULE_EDIT_REPLY:
41 ui()->files_module_edit_reply((sfinx_string_t *)el);
43 case SFINX_FILES_MODULE_CLASSIFY_REPLY:
44 ui()->files_module_classify_reply((sfinx_string_t *)el);
46 case SFINX_ELEMENT_PROGRESS:
47 ui()->progress((sfinx_progress_t *)el);
49 // case SFINX_FILES_MODULE_SORTED_TREE:
50 case SFINX_FILES_MODULE_UNSORTED_TREE:
51 ui()->fill_files_module_tree((sfinx_files_vector_t *)el);
53 case SFINX_FILES_MODULE_CONF:
54 // set files module conf
55 files_module_conf.copy(el);
56 ui()->fill_preferences();
58 case SFINX_EDIT_SLICE:
59 ui()->edit_slice((sfinx_slice_t *)el);
61 // case SFINX_SLICES_MODULE_TREE:
62 case SFINX_OBJECTS_TREE:
63 //ui()->fill_slices_tree((sfinx_slice_vector_t *)el);
64 slices.copy((sfinx_slice_vector_t *)el);
65 slices_need_update = false;
66 ui()->fill_objects_tree();
68 // case SFINX_SLICES_MODULE_TREE_EXCEPT:
69 // ui()->fill_select_slice_tree((sfinx_slice_vector_t *)el);
72 log("sfinx:process", "Unknown element id - %s", sfinx_cmd2str(el->tid()));
80 void faraon_app::main()
82 // after connecting get all objects info
85 if (sfinx.pending()) {
86 if (process_requests()) {
87 log("faraon:main", "Bad sfinx message");
96 int main(int argc, char **argv)
98 setlocale(LC_ALL, "");
100 sprintf(version, "v%0d.%0d.%0d", SFINX_VERSION_MAJOR, SFINX_VERSION_MINOR, SFINX_VERSION_PLEVEL);
101 app = new faraon_app(argc, argv, "faraon", version, "Harbour <Harbour@Sfinx.Od.UA>", "GPL");
102 app->start_ui(); // start ui
103 app->read_preferences();
106 if (!app->connected()) {
112 catch (SockException *s) {
113 app->ui()->log(SFINX_LOG_FATAL, "Socket exception to %s",
114 app->server_name.c_str());
115 app->sfinx.disconnect();
119 app->ui()->log(SFINX_LOG_FATAL, "Error connecting to %s: (%d) \'%s\'",
120 app->server_name.c_str(), s->getErrorNumber(), s->getErrorString());
124 app->ui()->log(SFINX_LOG_WARN, "Unknown exeption while talking to %s",
125 app->server_name.c_str());
126 app->sfinx.disconnect();
133 bool faraon_app::connect()
135 if (!server_name.size()) {
136 ui()->log(SFINX_LOG_FATAL, "Sfinx server name is not set !");
139 ui()->log(SFINX_LOG_NOTICE, "Connecting to Sfinx server at %s", server_name.c_str());
140 // ask username/pass or select auth_type
141 if (!sfinx.connect(server_name)) {
142 char b[1024], b1[128];
143 sprintf(b, "Connected to server v%d.%d.%d, %lld crypt facilities [ ",
144 sfinx.daemon_version->get(0), sfinx.daemon_version->get(1),
145 sfinx.daemon_version->get(2), sfinx.packet_crypt_types->len());
146 for (u32_t i = 0; i < sfinx.packet_crypt_types->len(); i++) {
147 sprintf(b1, "%s%s", i ? ", " : "",
148 sfinx_cmd2str(sfinx.packet_crypt_types->get(i)));
151 sprintf(b1, " ], %lld auth level [ ", sfinx.min_auth_levels->len());
153 for (u32_t i = 0; i < sfinx.min_auth_levels->len(); i++) {
154 sprintf(b1, "%s%s", i ? ", " : "", sfinx_cmd2str(sfinx.min_auth_levels->get(i)));
158 ui()->log(SFINX_LOG_NOTICE, b);
159 strcpy(b, "md5 server challenge [ ");
160 for (u32_t i = 0; i < sfinx.md5_challenge->len(); i++) {
161 sprintf(b1, "%02x", sfinx.md5_challenge->get(i));
165 ui()->log(SFINX_LOG_NOTICE, b);
171 void faraon_app::read_preferences()
174 Fl_Preferences conn_prefs(prefs, "Connection" );
175 conn_prefs.get("Sfinx Server Name", buf, "localhost", 100);
178 sfinx.send(SFINX_FILES_MODULE_CONF_REQUEST, (u8_t) 0);
181 void faraon_app::write_preferences()
183 Fl_Preferences conn_prefs(prefs, "Connection" );
184 conn_prefs.set("Sfinx Server Name", server_name.c_str());
187 sfinx.send(files_module_conf);