static void sieve_session_putscript_cb(SieveSession *session, SieveResult *result) { /* Remove script name from the beginning the response, * which is added by Dovecot/Pigeonhole */ gchar *start, *desc = result->description; gchar *end = NULL; if (!desc) { /* callback just for the status */ command_cb(session->current_cmd, result); } while (desc && desc[0]) { if ((end = strchr(desc, '\r')) || (end = strchr(desc, '\n'))) while (*end == '\n' || *end == '\r') *end++ = '\0'; if (g_str_has_prefix(desc, "NULL_") && (start = strchr(desc+5, ':'))) { desc = start+1; while (*desc == ' ') desc++; /* TODO: match against known script name, in case it contains * weird text like ": line " */ } else if ((start = strstr(desc, ": line ")) || (start = strstr(desc, ": error"))) { desc = start+2; } result->description = desc; command_cb(session->current_cmd, result); desc = end; } }
void Op::activate_fast() { char cmd[200] = "show objectlist/class=dsfastcurve/title=\"Fast Curve List\""; if ( command_cb) command_cb( parent_ctx, cmd); }
void Op::activate_graph() { char cmd[200] = "show objectlist/class=xttgraph/title=\"Process Graphic List\""; if ( command_cb) command_cb( parent_ctx, cmd); }
void Op::activate_trend() { char cmd[200] = "show objectlist/class=dstrend,dstrendcurve/title=\"Trend List\"/sort"; if ( command_cb) command_cb( parent_ctx, cmd); }
void Op::activate_sup_node( void *id) { pwr_tCmd cmd; for ( unsigned int i = 0; i < sup_vect.size(); i++) { if ( sup_vect[i].buttonw == id) { sprintf( cmd, "open graph/class/inst=%s", sup_vect[i].object_name); if ( command_cb) command_cb( parent_ctx, cmd); break; } } }
static void sieve_read_chunk(SieveSession *session, gchar *data, guint len) { log_print(LOG_PROTOCOL, "Sieve< [%u bytes]\n", len); switch (session->state) { case SIEVE_GETSCRIPT_DATA: command_cb(session->current_cmd, (gchar *)data); break; case SIEVE_SETACTIVE: /* Dovecot shows a script's warnings when making it active */ /* TODO: append message in case it is very long*/ strretchomp(data); sieve_error(session, data); break; case SIEVE_PUTSCRIPT: { SieveResult result = {.description = (gchar *)data}; sieve_session_putscript_cb(session, &result); break; } default: log_warning(LOG_PROTOCOL, _("error occurred on SIEVE session\n")); } } static gint sieve_read_chunk_done(SieveSession *session) { gint ret = SE_OK; switch (session->state) { case SIEVE_GETSCRIPT_DATA: /* wait for ending "OK" response */ break; case SIEVE_SETACTIVE: case SIEVE_PUTSCRIPT: session->state = SIEVE_READY; break; default: log_warning(LOG_PROTOCOL, _("error occurred on SIEVE session\n")); } if (ret == SE_OK && session->state == SIEVE_READY) ret = sieve_pop_send_queue(session); if (ret == SE_OK) return session_recv_msg(SESSION(session)); return 0; }
int Op::appl_action( int idx) { pwr_tCmd cmd; pwr_tAName name; int sts; if ( command_cb) { sts = gdh_AttrrefToName( &button_aref[idx], name, sizeof(name), cdh_mName_volumeStrict); strcpy( cmd, "ope gra/obj="); strcat( cmd, name); command_cb( parent_ctx, cmd); } return XNAV__SUCCESS; }
static gint sieve_session_recv_msg(Session *session, const gchar *msg) { SieveSession *sieve_session = SIEVE_SESSION(session); SieveResult result; gint ret = SE_OK; log_print(LOG_PROTOCOL, "Sieve< %s\n", msg); if (response_is_bye(msg)) { gchar *status; parse_response((gchar *)msg, &result); if (!result.description) status = g_strdup(_("Disconnected")); else if (g_str_has_prefix(result.description, "Disconnected")) status = g_strdup(result.description); else status = g_strdup_printf(_("Disconnected: %s"), result.description); sieve_session->error = SE_ERROR; sieve_error(sieve_session, status); sieve_session->state = SIEVE_DISCONNECTED; g_free(status); return -1; } switch (sieve_session->state) { case SIEVE_CAPABILITIES: if (response_is_ok(msg)) { /* capabilities list done */ #ifdef USE_GNUTLS if (sieve_session->tls_init_done == FALSE && sieve_session->config->tls_type != SIEVE_TLS_NO) { if (sieve_session->capability.starttls) { log_print(LOG_PROTOCOL, "Sieve> STARTTLS\n"); session_send_msg(session, SESSION_SEND, "STARTTLS"); sieve_session->state = SIEVE_STARTTLS; } else if (sieve_session->config->tls_type == SIEVE_TLS_YES) { log_warning(LOG_PROTOCOL, "Sieve: does not support STARTTLS\n"); sieve_session->state = SIEVE_ERROR; } else { log_warning(LOG_PROTOCOL, "Sieve: continuing without TLS\n"); sieve_session->state = SIEVE_READY; } break; } #endif /* authenticate after getting capabilities */ if (!sieve_session->authenticated) { ret = sieve_auth(sieve_session); } else { sieve_session->state = SIEVE_READY; sieve_connected(sieve_session, TRUE); } } else { /* got a capability */ gchar *cap_name, *cap_value; parse_split((gchar *)msg, &cap_name, &cap_value); sieve_got_capability(sieve_session, cap_name, cap_value); } break; case SIEVE_READY: if (!msg[0]) break; log_warning(LOG_PROTOCOL, _("unhandled message on Sieve session: %s\n"), msg); break; case SIEVE_STARTTLS: #ifdef USE_GNUTLS if (session_start_tls(session) < 0) { sieve_session->state = SIEVE_ERROR; sieve_session->error = SE_ERROR; sieve_error(sieve_session, _("TLS failed")); return -1; } sieve_session->tls_init_done = TRUE; sieve_session->state = SIEVE_CAPABILITIES; #endif break; case SIEVE_AUTH: ret = sieve_auth_recv(sieve_session, msg); break; case SIEVE_AUTH_LOGIN_USER: ret = sieve_auth_login_user_recv(sieve_session, msg); break; case SIEVE_AUTH_PLAIN: case SIEVE_AUTH_LOGIN_PASS: case SIEVE_AUTH_CRAM_MD5: if (response_is_no(msg)) { log_print(LOG_PROTOCOL, "Sieve auth failed\n"); session->state = SIEVE_RETRY_AUTH; ret = SE_AUTHFAIL; } else if (response_is_ok(msg)) { log_print(LOG_PROTOCOL, "Sieve auth completed\n"); sieve_error(sieve_session, ""); sieve_session->authenticated = TRUE; sieve_session->state = SIEVE_READY; sieve_connected(sieve_session, TRUE); } break; case SIEVE_NOOP: if (!response_is_ok(msg)) { sieve_session->state = SIEVE_ERROR; } sieve_session->state = SIEVE_READY; break; case SIEVE_LISTSCRIPTS: if (response_is_no(msg)) { /* got an error. probably not authenticated. */ command_cb(sieve_session->current_cmd, NULL); sieve_session->state = SIEVE_READY; } else if (response_is_ok(msg)) { /* end of list */ sieve_session->state = SIEVE_READY; sieve_session->error = SE_OK; command_cb(sieve_session->current_cmd, (gpointer)&(SieveScript){0}); } else { /* got a script name */ SieveScript script; gchar *script_status; parse_split((gchar *)msg, &script.name, &script_status); script.active = (script_status && strcasecmp(script_status, "active") == 0); command_cb(sieve_session->current_cmd, (gpointer)&script); } break; case SIEVE_RENAMESCRIPT: if (response_is_no(msg)) { /* error */ command_cb(sieve_session->current_cmd, NULL); } else if (response_is_ok(msg)) { command_cb(sieve_session->current_cmd, (void*)TRUE); } else { log_warning(LOG_PROTOCOL, _("error occurred on SIEVE session\n")); } sieve_session->state = SIEVE_READY; break; case SIEVE_SETACTIVE: parse_response((gchar *)msg, &result); if (result.success) { /* clear status possibly set when setting another * script active. TODO: give textual feedback */ sieve_error(sieve_session, ""); command_cb(sieve_session->current_cmd, NULL); } else if (result.description) { command_cb(sieve_session->current_cmd, result.description); } else { log_warning(LOG_PROTOCOL, _("error occurred on SIEVE session\n")); } if (result.has_octets) { return sieve_session_recv_chunk(sieve_session, result.octets); } else { sieve_session->state = SIEVE_READY; } break; case SIEVE_GETSCRIPT: if (response_is_no(msg)) { command_cb(sieve_session->current_cmd, (void *)-1); sieve_session->state = SIEVE_READY; } else { parse_response((gchar *)msg, &result); sieve_session->state = SIEVE_GETSCRIPT_DATA; return sieve_session_recv_chunk(sieve_session, result.octets); } break; case SIEVE_GETSCRIPT_DATA: if (!msg[0]) break; sieve_session->state = SIEVE_READY; if (response_is_ok(msg)) { command_cb(sieve_session->current_cmd, NULL); } else if (msg[0]) { log_warning(LOG_PROTOCOL, _("error occurred on SIEVE session\n")); } break; case SIEVE_PUTSCRIPT: if (!msg[0]) break; parse_response((gchar *)msg, &result); sieve_session_putscript_cb(sieve_session, &result); if (result.has_octets) { return sieve_session_recv_chunk(sieve_session, result.octets); } else { sieve_session->state = SIEVE_READY; } break; case SIEVE_DELETESCRIPT: parse_response((gchar *)msg, &result); if (!result.success) { command_cb(sieve_session->current_cmd, result.description); } else { command_cb(sieve_session->current_cmd, NULL); } sieve_session->state = SIEVE_READY; break; case SIEVE_ERROR: log_warning(LOG_PROTOCOL, _("error occurred on Sieve session. data: %s\n"), msg); sieve_session->error = SE_ERROR; break; case SIEVE_RETRY_AUTH: log_warning(LOG_PROTOCOL, _("unhandled message on Sieve session: %s\n"), msg); ret = sieve_auth(sieve_session); break; default: log_warning(LOG_PROTOCOL, _("unhandled message on Sieve session: %d\n"), sieve_session->state); sieve_session->error = SE_ERROR; return -1; } if (ret == SE_OK && sieve_session->state == SIEVE_READY) ret = sieve_pop_send_queue(sieve_session); if (ret == SE_OK) { return session_recv_msg(session); } else if (ret == SE_AUTHFAIL) { sieve_error(sieve_session, _("Auth failed")); sieve_session->state = SIEVE_ERROR; sieve_session->error = SE_ERROR; } return 0; }
void Op::activate_cmd_menu_item( char *cmd) { if ( command_cb) command_cb( parent_ctx, cmd); }
void Op::activate_logout() { char cmd[200] ="logout /messagewindow"; if ( command_cb) command_cb( parent_ctx, cmd); }
void Op::activate_show_user() { char cmd[200] ="show user/window"; if ( command_cb) command_cb( parent_ctx, cmd); }
void Op::activate_switch_user() { char cmd[200] ="login"; if ( command_cb) command_cb( parent_ctx, cmd); }
void Op::activate_history() { char cmd[200] = "show objectlist/class=sevhist,sevhistobject/title=\"Process History List\"/sort"; if ( command_cb) command_cb( parent_ctx, cmd); }
void Op::activate_blocklist() { char cmd[20] = "show blocklist"; if ( command_cb) command_cb( parent_ctx, cmd); }
void Op::activate_eventlog() { char cmd[20] = "show histlist"; if ( command_cb) command_cb( parent_ctx, cmd); }
void Op::activate_alarmlist() { char cmd[20] = "show alarm"; if ( command_cb) command_cb( parent_ctx, cmd); }