summaryrefslogtreecommitdiff
path: root/support/dktools/WxpqdicFrame.wxc
diff options
context:
space:
mode:
Diffstat (limited to 'support/dktools/WxpqdicFrame.wxc')
-rw-r--r--support/dktools/WxpqdicFrame.wxc1575
1 files changed, 0 insertions, 1575 deletions
diff --git a/support/dktools/WxpqdicFrame.wxc b/support/dktools/WxpqdicFrame.wxc
deleted file mode 100644
index 6597bcb7cf..0000000000
--- a/support/dktools/WxpqdicFrame.wxc
+++ /dev/null
@@ -1,1575 +0,0 @@
-%% options
-
-copyright owner = Dirk Krause
-
-copyright year = 2016-xxxx
-
-SPDX-License-Identifier: BSD-3-Clause
-
-
-
-%% wx-gui
-
-type = frame
-contents = mainSizer
-icon = wxpqdic_icon
-status bar = 1 sTexts[8]
-menu bar = mbMain
-tool bar = tbMain
-
-[wxMenuBar mbMain]
-contents = menuFile
-contents = menuView
-contents = menuHelp
-
-[wxMenu menuFile]
-text = sTexts[0]
-contents = miFileExit
-
-[wxMenuItem miFileExit]
-id = WxpqdicFrame_Quit
-text = sTexts[1]
-tip = sTexts[2]
-
-[wxMenu menuView]
-text = sTexts[22]
-contents = miViewUpdate
-
-[wxMenuItem miViewUpdate]
-id = WxpqdicFrame_View_Update
-text = sTexts[23]
-tip = sTexts[24]
-
-[wxMenu menuHelp]
-text = sTexts[3]
-contents = miHelpAbout
-contents = miHelpContents
-
-[wxMenuItem miHelpAbout]
-id = WxpqdicFrame_Help_About
-text = sTexts[4]
-tip = sTexts[5]
-
-[wxMenuItem miHelpContents]
-id = WxpqdicFrame_Help_Contents
-text = sTexts[6]
-tip = sTexts[7]
-
-[wxBoxSizer mainSizer]
-direction = horizontal
-contents = $space(10)
-contents = verticalSizer
-contents = $space(10)
-
-[wxBoxSizer verticalSizer]
-direction = vertical
-grow = yes
-proportion = 1
-contents = $space(10)
-contents = contentsSizer
-contents = $space(10)
-
-[wxGridBagSizer contentsSizer]
-grid = 2 2
-contents = lLimit 0 0 1 1 right
-contents = tLimit . +1 1 1
-contents = lUsed +1 0 1 1 right
-contents = tUsed . +1 1 1
-contents = $space(5) +1 0 1 1
-contents = lAccount +1 0 1 1 right
-contents = tAccount . +1 1 1
-contents = $space(5) +1 0 1 1
-contents = lAllowed +1 0 1 1 right
-contents = tAllowed . +1 1 1
-contents = $space(5) +1 0 1 1
-contents = lStatus +1 0 1 2
-
-[wxStaticText lLimit]
-text = sTexts[13]
-
-[wxStaticText tLimit]
-text = sTexts[14]
-
-[wxStaticText lUsed]
-text = sTexts[15]
-
-[wxStaticText tUsed]
-text = sTexts[27]
-
-[wxStaticText lAccount]
-text = sTexts[17]
-
-[wxStaticText tAccount]
-text = sTexts[16]
-
-[wxStaticText lAllowed]
-text = sTexts[18]
-
-[wxStaticText tAllowed]
-text = sTexts[27]
-
-[wxStaticText lStatus]
-text = sTexts[21]
-
-
-[wxToolBar tbMain]
-contents = bUpdate
-contents = bExit
-
-[wxToolBarToolBase bUpdate]
-text = sTexts[25]
-tip = sTexts[24]
-bitmap = xpm_run_conversion
-id = WxpqdicFrame_View_Update
-
-[wxToolBarToolBase bExit]
-text = sTexts[26]
-tip = sTexts[2]
-bitmap = xpm_exit_program
-id = WxpqdicFrame_Quit
-
-
-%% header start
-
-
-
-%% class start
-class WxpqdicFrame : public Dk4WxFrame
-{
- private:
-
- /** Event table for frame.
- */
-#if wxCHECK_VERSION(3,0,0)
- wxDECLARE_EVENT_TABLE();
-#else
- DECLARE_EVENT_TABLE()
-#endif
-
- protected:
-
- /** Buffer for response processing.
- */
- char bResponse[32 * sizeof(dk4_um_t)];
-
- /** Address pair, 0=remote, 1=local.
- */
- dk4_sockaddr_storage_t aAddresses[2];
-
- /** Remote host name as wxChar string.
- */
- wxString sHostname;
-
- /** Queue name as wxChar string.
- */
- wxString sQueuename;
-
- /** User name as wxChar string.
- */
- wxString sUsername;
-
- /** Localized texts.
- */
- wxChar const * const *sTexts;
-
- /** Non-localized texts.
- */
- wxChar const * const *sNlWx;
-
- /** Non-localized texts.
- */
- dkChar const * const *sNlDk;
-
- /** Copy of the command line arguments poiner.
- */
- wxChar **copyArgv;
-
- /* __CHANGE__ 011: Add further member variables.
- */
-
- /** Critical section to protect socket and timer.
- */
- wxCriticalSection csProtect;
-
- /** Black color for normal status text.
- */
- wxColour cBlack;
-
- /** Red color for not allowed to print.
- */
- wxColour cRed;
-
- /** Green color for allowed to print.
- */
- wxColour cGreen;
-
- /** Timer for periodic updates.
- */
- wxTimer timer;
-
- /** Error report from socket subsystem initialization.
- */
- dk4_er_t sockerr;
-
- /** Host name to query.
- */
- dkChar *pHostname;
-
- /** Print queue to check.
- */
- char *pQueuename;
-
- /** User name to use in check.
- */
- char *pUsername;
-
- /** Request to send to server.
- */
- char *pRequest;
-
- /** Previous limit value.
- */
- dk4_um_t uLimit;
-
- /** Previous used value.
- */
- dk4_um_t uUsed;
-
- /** Previous account value.
- */
- dk4_um_t uAccount;
-
- /** Length of request.
- */
- size_t szRequest;
-
- /** Size of response buffer.
- */
- size_t szResponse;
-
- /** Time last request was sended.
- */
- dk4_time_t tRequestSended;
-
- /** Update interval in seconds.
- */
- long lUpdateInterval;
-
- /** Timeout interval before complaining about missing response.
- */
- long lWaitResponse;
-
- /** Previous summary value.
- */
- int iSummary;
-
- /** Number of command line arguments.
- */
- int copyArgc;
-
- /** Current state.
- */
- int iState;
-
- /** Socket for data exchange
- */
- dk4_socket_t sock;
-
- /** Port number on remote host.
- */
- unsigned short usPortnumber;
-
- /** Local port number to use.
- */
- unsigned short usLocalPort;
-
- /** Flag: Socket subsystem initialized.
- */
- bool bSockInit;
-
- /** Flag: Remote host uses UTF-8 encoding (user name and queue name).
- */
- bool bIsUtf8;
-
- /** Flag: This idle event is the first one (no idle events before).
- */
- bool bFirstIdle;
-
- /** Flag: All components initialized completely.
- */
- bool bIsInitialized;
-
- /** Flag: This is the first response.
- */
- bool bFirstResponse;
-
-%% class end
-
- public:
-
- /** Constructor.
- @param wxid Window ID.
- @param applicationHelper Application helper object.
- @param hc Help controller for online help.
- @param argc Number of command line arguments.
- @param argv Command line arguments array.
- @param localizedTexts Localized wxChar texts.
- @param nlWx Non-localized wxChar texts.
- @param nlDk Non-localized dkChar texts.
- @param bSocketsInitialized Flag: Socket subsys initialized.
- @param psockerr Error report from socket initialization.
- */
- WxpqdicFrame(
- int wxid,
- Dk4WxApplicationHelper *applicationHelper,
- Dk4WxHelpController *hc,
- int argc,
- wxChar **argv,
- wxChar const * const *localizedTexts,
- wxChar const * const *nlWx,
- dkChar const * const *nlDk,
- bool bSocketsInitialized,
- dk4_er_t *psockerr
- );
-
- /** Destructor.
- */
- ~WxpqdicFrame();
-
- /** Check whether we can close the window.
- @param isLast Flag: Last main window to close.
- */
- bool
- CanClose(bool isFinal);
-
- /** Handler for File/Exit.
- @param event Event to process.
- */
- void
- OnQuit(wxCommandEvent & event);
-
- /** Handler for File/Update.
- @param event Event to process.
- */
- void
- OnRun(wxCommandEvent & event);
-
- /** Handler for Help/About.
- @param event Event to process.
- */
- void
- OnAbout(wxCommandEvent & event);
-
- /** Handler for Help/Contents.
- @param event Event to process.
- */
- void
- OnHelpContents(wxCommandEvent & event);
-
- /* __CHANGE__ 008: Remove OnIdle if no idle processing required.
- */
- /** Handler for idle events.
- */
- void
- OnIdle(wxIdleEvent & event);
-
- /* __CHANGE__ 017: Event handlers for further events.
- */
-
- /** Handler for timer event.
- @param event Timer event to process.
- */
- void
- OnTimer(wxTimerEvent & event);
-
-
- /* __CHANGE__ 014: Add further methods.
- */
-
- private:
-
- /** Attempt to configure.
- @param perrc Address of error code variable.
- @return True if configuration failed and the application should
- exit, false on success.
- */
- bool
- ConfigureAndCheckNeedToClose(int *perrc);
-
- /** Attempt to receive data, send request again if interval is over.
- @return True if the windows requires an update, false otherwise.
- */
- bool
- DataExchangeWithServer(void);
-
- bool
- RetrieveResponse(void);
-
- bool
- ProcessResponse(bool & found);
-
- bool
- SendRequest(bool force = false);
-
-};
-
-%% header end
-
-%% module start
-
-#include "dk4conf.h"
-
-#ifndef DK4_SIZEOF_WXCHAR
-#ifndef DK4WXCS_H_INCLUDED
-#include "dk4wxcs.h"
-#endif
-#endif
-
-#include "wxpqdic.h"
-#include "dk4user.h"
-#include "dk4enc.h"
-#include "dk4strd.h"
-#include "dk4rec.h"
-#include "dk4str8.h"
-#include "dk4strx.h"
-#include "dk4recwx.h"
-#include "dk4maasz.h"
-#include "dk4mai8ddu.h"
-#include "dk4mai8dii.h"
-#include "dk4mao8d.h"
-#include "dk4maowd.h"
-#include "dk4numco.h"
-
-
-#include "gui-img/shared/toolbar/exit-program.xpm"
-#include "gui-img/shared/toolbar/run-conversion.xpm"
-
-#include "dk4verswx.h"
-
-#if !defined(__WXMSW__)
-#include "gui-img/icons/dkicon.xpm"
-#endif
-
-
-
-$!trace-include
-
-
-
-/* __CHANGE__ 017: Add further events. */
-/* __CHANGE__ 008: Remove OnIdle if no idle processing required. */
-
-#if wxCHECK_VERSION(3,0,0)
-wxBEGIN_EVENT_TABLE(WxpqdicFrame,wxFrame)
-#else
-BEGIN_EVENT_TABLE(WxpqdicFrame,wxFrame)
-#endif
- EVT_MENU(WxpqdicFrame_View_Update, WxpqdicFrame::OnRun)
- EVT_MENU(WxpqdicFrame_Quit, WxpqdicFrame::OnQuit)
- EVT_MENU(WxpqdicFrame_Help_About, WxpqdicFrame::OnAbout)
- EVT_MENU(WxpqdicFrame_Help_Contents, WxpqdicFrame::OnHelpContents)
- EVT_TIMER(WxpqdicFrame_Timer, WxpqdicFrame::OnTimer)
- EVT_IDLE(WxpqdicFrame::OnIdle)
-#if wxCHECK_VERSION(3,0,0)
-wxEND_EVENT_TABLE()
-#else
-END_EVENT_TABLE()
-#endif
-
-
-
-static const wxChar versionNumber[] = { DKT_VERSION_WX };
-
-
-
-#if __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
-#endif
-
-static const wxCmdLineEntryDesc wxpqdic_cmd_line_entries[] = {
- {
- wxCMD_LINE_OPTION,
- wxT_2("h"),
- wxT_2("host"),
- wxT_2("Host to connect to."),
- wxCMD_LINE_VAL_STRING,
- 0
- },
- {
- wxCMD_LINE_OPTION,
- wxT_2("p"),
- wxT_2("port"),
- wxT_2("Port number to connect to."),
- wxCMD_LINE_VAL_NUMBER,
- 0
- },
- {
- wxCMD_LINE_OPTION,
- wxT_2("l"),
- wxT_2("local-port"),
- wxT_2("Local port number to use."),
- wxCMD_LINE_VAL_NUMBER,
- 0
- },
- {
- wxCMD_LINE_OPTION,
- wxT_2("q"),
- wxT_2("queue"),
- wxT_2("Queue name to check."),
- wxCMD_LINE_VAL_STRING,
- 0
- },
- {
- wxCMD_LINE_OPTION,
- wxT_2("u"),
- wxT_2("user"),
- wxT_2("User name to check."),
- wxCMD_LINE_VAL_STRING,
- 0
- },
- {
- wxCMD_LINE_OPTION,
- wxT_2("i"),
- wxT_2("interval"),
- wxT_2("Time interval for automatic update."),
- wxCMD_LINE_VAL_NUMBER,
- 0
- },
- {
- wxCMD_LINE_OPTION,
- wxT_2("a"),
- wxT_2("ascii"),
- wxT_2("Remote host uses ASCII encoding, not UTF-8."),
- wxCMD_LINE_VAL_NONE,
- 0
- },
- { wxCMD_LINE_NONE }
-};
-
-#if __GNUC__
-#pragma GCC diagnostic pop
-#endif
-
-
-/** Key names for preferences.
-*/
-static const wxChar * const wxpqdic_pref_key_names[] = {
-$!string-table macro=wxT
-printqd.host
-printqd.port
-printqd.queue
-printqd.interval
-printqd.local
-printqd.encoding
-$!end
-};
-
-
-
-/** Constant 8-bit strings, not localized.
-*/
-static const char * const wxpqdic_kw[] = {
-$!string-table
-#
-# 0 newline
-#
-\n
-#
-# 1 space
-#
-
-#
-# 2 keyword info
-#
-info
-$!end
-};
-
-
-%% constructor start
-WxpqdicFrame::WxpqdicFrame(
- int wxid,
- Dk4WxApplicationHelper *applicationHelper,
- Dk4WxHelpController *hc,
- int argc,
- wxChar **argv,
- wxChar const * const *localizedTexts,
- wxChar const * const *nlWx,
- dkChar const * const *nlDk,
- bool bSocketsInitialized,
- dk4_er_t *psockerr
-) : Dk4WxFrame(nlWx[0], applicationHelper, hc, wxid),
- sHostname(wxT("")),
- sQueuename(wxT("")),
- sUsername(wxT("")),
- cBlack(0, 0, 0),
- cRed(127, 0, 0),
- cGreen(0, 127, 0),
- timer(this, WxpqdicFrame_Timer)
-
-{
- /* __CHANGE__ 012: Add further local variables.
- */
-
- /* __CHANGE__ 012: Initialize further local variables.
- */
-
- sTexts = localizedTexts;
- sNlWx = nlWx;
- sNlDk = nlDk;
-#if defined(__WXMSW__)
- wxIcon wxpqdic_icon(sNlWx[4]);
-#else
- wxIcon wxpqdic_icon(xpm_dkicon);
-#endif
-
- /* __CHANGE__ 011: Initialize further class members.
- */
- bSockInit = bSocketsInitialized;
- DK4_MEMCPY(&sockerr, psockerr, sizeof(dk4_er_t));
- pHostname = NULL;
- pQueuename = NULL;
- pUsername = NULL;
- pRequest = NULL;
- szRequest = (size_t)0UL;
- lUpdateInterval = 30L;
- lWaitResponse = 1L;
- usPortnumber = 9100;
- usLocalPort = 9100;
- bIsUtf8 = true;
- bFirstIdle = true;
- bFirstResponse = true;
- bIsInitialized = false;
- copyArgc = argc;
- copyArgv = argv;
- sock = INVALID_SOCKET;
- iState = WXPQDIC_STATE_OK;
- tRequestSended = (dk4_time_t)0UL;
- szResponse = sizeof(bResponse);
- DK4_MEMRES(&(aAddresses[0]), (2*sizeof(dk4_sockaddr_storage_t)));
-
-%% constructor end
- if(dkctGUILayoutOK) {
- SetTitle(nlWx[0]);
- }
-
-
- /* __CHANGE__ 012: Release resources allocated by local variables.
- */
-}
-
-%% module end
-
-
-
-WxpqdicFrame::~WxpqdicFrame()
-{
-
- /* __CHANGE__ 011: Release resources allocated by further class members.
- */
-}
-
-
-
-bool
-WxpqdicFrame::CanClose(bool WXUNUSED(isLast))
-{
- bool back = true;
-
- return back;
-}
-
-
-void
-WxpqdicFrame::OnQuit(wxCommandEvent & WXUNUSED(event))
-{
- {
- wxCriticalSectionLocker lockCsProtect(csProtect);
- if (bIsInitialized) {
- timer.Stop();
- bIsInitialized = false;
- }
- }
- if (INVALID_SOCKET != sock) {
- dk4socket_close(sock, NULL);
- sock = INVALID_SOCKET;
- }
- dk4mem_release(pUsername);
- dk4mem_release(pQueuename);
- dk4mem_release(pHostname);
- dk4mem_release(pRequest);
- Show(false);
- /* !!!!! TODO: Release resources */
- Close();
-}
-
-
-
-void
-WxpqdicFrame::OnAbout(wxCommandEvent & WXUNUSED(event))
-{
- wxString text(wxT(""));
- wxString title(wxT(""));
-
- /* Construct message text. */
- text.Append(sNlWx[0]);
- text.Append(sNlWx[7]);
-#if 0
- text.Append(sNlWx[1]);
-#endif
- text.Append(versionNumber);
- text.Append(sNlWx[8]);
- text.Append(sTexts[9]);
- text.Append(sNlWx[2]);
- text.Append(sNlWx[8]);
- text.Append(sNlWx[8]);
- text.Append(sTexts[11]);
- text.Append(sNlWx[8]);
- text.Append(sNlWx[9]);
- text.Append(sNlWx[8]);
- text.Append(sNlWx[8]);
- text.Append(sTexts[12]);
- text.Append(sNlWx[8]);
- text.Append(sNlWx[10]);
- text.Append(sNlWx[8]);
- text.Append(sNlWx[11]);
- text.Append(sNlWx[8]);
- text.Append(sNlWx[12]);
- text.Append(sNlWx[8]);
- text.Append(sNlWx[13]);
- text.Append(sNlWx[8]);
- text.Append(sNlWx[14]);
- text.Append(sNlWx[8]);
- text.Append(sNlWx[15]);
- text.Append(sNlWx[8]);
-
- /* Construct dialog box title. */
- title.Append(sTexts[10]);
- title.Append(sNlWx[0]);
-
- /* Show dialog box. */
- wxMessageBox(text, title);
-
-}
-
-
-
-void
-WxpqdicFrame::OnHelpContents(wxCommandEvent & WXUNUSED(event))
-{
- DisplayContents();
-}
-
-/* __CHANGE__ 017: Event handlers for further events.
-*/
-
-/* __CHANGE__ 014: Implementation of further methods.
-*/
-
-
-bool
-WxpqdicFrame::ConfigureAndCheckNeedToClose(int *perrc)
-{
- wxString dummy(wxT(""));
- dkChar buf[1024];
- char c8b[1024];
- dk4_er_t er;
- wxChar *pv[] = { NULL, NULL, NULL, NULL, NULL, NULL };
- wxCStrData hnstrdata = dummy.c_str();
- wxCStrData qnstrdata = dummy.c_str();
- wxCStrData unstrdata = dummy.c_str();
- const wxChar *cptr;
- const size_t szbuf = DK4_SIZEOF(buf,dkChar);
- const size_t szc8b = sizeof(c8b);
- long l = 0L;
- int res = 0;
- bool back = true;
-
- /* Retrieve some fallback values from preferences.
- */
- pAppHelp->GetMultiple(wxpqdic_pref_key_names, pv, 6);
- $? ". host = \"%!ws\"", TR_WXSTR(pv[0])
- $? ". port = \"%!ws\"", TR_WXSTR(pv[1])
- $? ". queue = \"%!ws\"", TR_WXSTR(pv[2])
- $? ". interval = \"%!ws\"", TR_WXSTR(pv[3])
- $? ". local = \"%!ws\"", TR_WXSTR(pv[4])
- $? ". encoding = \"%!ws\"", TR_WXSTR(pv[5])
-
- /* Check command line arguments
- */
- {
- wxLogNull log;
- wxCmdLineParser parser(wxpqdic_cmd_line_entries, copyArgc, copyArgv);
- res = parser.Parse(false);
- /*
- Check overall parsing of arguments
- */
- if (0 != res) { $? "! failed to parse cmd line args"
- /* ERROR: Failed to parse command line arguments */
- *perrc = WXPQDIC_FRAME_ERROR_PARSE;
- goto finished;
- }
- /*
- Option -a means the remote host wants ASCII data.
- */
- if (parser.Found(wxT_2("a"))) {
- bIsUtf8 = false;
- } else {
- if (NULL != pv[5]) {
- if (0 != dk4strx_casecmp(pv[5], sNlWx[16])) {
- if (0 != dk4strx_casecmp(pv[5], sNlWx[17])) {
- bIsUtf8 = false;
- }
- }
- }
- }
- /*
- Try to obtain host name from arguments or from preferences.
- */
- dk4error_init(&er);
- cptr = NULL;
- if (parser.Found(wxT_2("h"), &sHostname)) {
- hnstrdata = sHostname.c_str();
- cptr = (wxChar const *)hnstrdata;
- }
- else {
- cptr = pv[0];
- }
- if (NULL != cptr) {
- if (pAppHelp->StringToDk(buf, szbuf, cptr, &er)) {
- pHostname = dk4str_dup(buf, NULL);
- if (NULL == pHostname) { $? ". pHostname = \"%!ds\"", pHostname
- /* ERROR: Memory */
- *perrc = WXPQDIC_FRAME_ERROR_MEMORY;
- goto finished;
- }
- } else {
- /* ERROR: Failed to convert string */
- *perrc = WXPQDIC_FRAME_ERROR_STRCONV_HOSTNAME;
- goto finished;
- }
- }
- if (NULL == pHostname) {
- /* ERROR: Missing host name */
- *perrc = WXPQDIC_FRAME_ERROR_HOSTNAME;
- goto finished;
- }
- /*
- Queue name is required.
- */
- cptr = NULL;
- if (parser.Found(wxT_2("q"), &sQueuename)) {
- qnstrdata = sQueuename.c_str();
- cptr = (wxChar const *)qnstrdata;
- }
- else {
- cptr = pv[2];
- }
- if (NULL != cptr) {
- res = dk4recwx_wxchar_to_char(
- c8b, szc8b, ((bIsUtf8) ? (DK4_ENCODING_UTF8) : (DK4_ENCODING_PLAIN)),
- cptr, pAppHelp->GetWxEncoding(), NULL
- );
- if (0 != res) {
- pQueuename = dk4str8_dup(c8b, NULL);
- if (NULL == pQueuename) { $? ". pQueuename = \"%!8s\"", pQueuename
- /* ERROR: Memory */
- *perrc = WXPQDIC_FRAME_ERROR_MEMORY;
- goto finished;
- }
- } else {
- /* ERROR: String conversion failed */
- *perrc = WXPQDIC_FRAME_ERROR_STRCONV_QUEUENAME;
- goto finished;
- }
- }
- else {
- /* ERROR: Missing queue name */
- *perrc = WXPQDIC_FRAME_ERROR_QUEUENAME;
- goto finished;
- }
- if (NULL == pQueuename) {
- /* ERROR: Missing queue name */
- *perrc = WXPQDIC_FRAME_ERROR_QUEUENAME;
- goto finished;
- }
- /*
- Port number is optional.
- */
- {
- bool portnoFound = false;
- l = 0L;
- if (parser.Found(wxT_2("p"), &l)) {
- portnoFound = true;
- }
- else {
- if (NULL != pv[1]) {
- wxString s(pv[1]);
- if (s.ToLong(&l, 0)) {
- portnoFound = true;
- }
- }
- }
- if (portnoFound) {
- if ((long)(USHRT_MAX) < l) {
- /* ERROR: Port number out of range */
- *perrc = WXPQDIC_FRAME_ERROR_PORT_OOR;
- goto finished;
- }
- if (0L == l) {
- /* ERROR: Illegal port number 0 */
- *perrc = WXPQDIC_FRAME_ERROR_PORT_ZERO;
- goto finished;
- }
- usPortnumber = (unsigned short)l;
- }
- }
- /*
- Local port number is optional.
- */
- {
- bool portnoFound = false;
- l = 0L;
- if (parser.Found(wxT_2("l"), &l)) {
- portnoFound = true;
- }
- else {
- if (NULL != pv[4]) {
- wxString s(pv[4]);
- if (s.ToLong(&l, 0)) {
- portnoFound = true;
- }
- }
- }
- if (portnoFound) {
- if ((long)(USHRT_MAX) < l) {
- /* ERROR: Port number out of range */
- *perrc = WXPQDIC_FRAME_ERROR_LOCALPORT_OOR;
- goto finished;
- }
- if (0L == l) {
- /* ERROR: Illegal port number 0 */
- *perrc = WXPQDIC_FRAME_ERROR_LOCALPORT_ZERO;
- goto finished;
- }
- usLocalPort = (unsigned short)l;
- }
- }
- /*
- User name is optional, use current user by default.
- */
- if (parser.Found(wxT_2("u"), &sUsername)) {
- unstrdata = sUsername.c_str();
- res = dk4recwx_wxchar_to_char(
- c8b, szc8b, ((bIsUtf8) ? (DK4_ENCODING_UTF8) : (DK4_ENCODING_PLAIN)),
- (wxChar const *)unstrdata, pAppHelp->GetWxEncoding(), NULL
- );
- if (0 != res) {
- pUsername = dk4str8_dup(c8b, NULL);
- if (NULL == pUsername) {
- /* ERROR: Memory */
- *perrc = WXPQDIC_FRAME_ERROR_MEMORY;
- goto finished;
- }
- }
- else {
- /* ERROR: Failed to convert user name */
- *perrc = WXPQDIC_FRAME_ERROR_STRCONV_USERNAME;
- goto finished;
- }
- }
- else {
- res = dk4user_get_logname(buf, szbuf, 0, NULL);
- if (0 != res) {
- res = dk4recode_dk_to_any(
- c8b, szc8b, ((bIsUtf8) ? (DK4_ENCODING_UTF8) : (DK4_ENCODING_PLAIN)),
- buf, pAppHelp->GetDkEncoding(), NULL
- );
- if (0 != res) {
- pUsername = dk4str8_dup(c8b, NULL);
- if (NULL == pUsername) {
- /* ERROR: Memory */
- *perrc = WXPQDIC_FRAME_ERROR_MEMORY;
- goto finished;
- }
- }
- else {
- /* ERROR: Failed to convert user name */
- *perrc = WXPQDIC_FRAME_ERROR_STRCONV_USERNAME;
- goto finished;
- }
- } else {
- /* ERROR: User name not found! */
- *perrc = WXPQDIC_FRAME_ERROR_USERNAME;
- goto finished;
- }
- }
- if (NULL == pUsername) {
- /* ERROR: No user name */
- *perrc = WXPQDIC_FRAME_ERROR_USERNAME;
- goto finished;
- }
- /*
- Interval length is optional.
- */
- {
- bool intervalFound = false;
- l = 0L;
- if (parser.Found(wxT_2("p"), &l)) {
- intervalFound = true;
- }
- else {
- if (NULL != pv[3]) {
- wxString s(pv[3]);
- if (s.ToLong(&l, 0)) {
- intervalFound = true;
- }
- }
- }
- if (intervalFound) {
- if (5L <= l) {
- lUpdateInterval = l;
- } else {
- lUpdateInterval = 5L;
- }
- }
- }
- /*
- Now build request
- */
- dk4error_init(&er);
- szRequest = strlen(wxpqdic_kw[2]);
- szRequest = dk4ma_size_t_add(szRequest, dk4str8_len(pQueuename), &er);
- szRequest = dk4ma_size_t_add(szRequest, dk4str8_len(pUsername), &er);
- szRequest = dk4ma_size_t_add(szRequest, dk4str8_len(wxpqdic_kw[2]), &er);
- szRequest = dk4ma_size_t_add(szRequest, 4, &er);
- if (DK4_E_NONE == er.ec) {
- pRequest = dk4mem_new(char,szRequest,NULL);
- if (NULL != pRequest) {
- if (0 == dk4str8_cpy_s(pRequest, szRequest, wxpqdic_kw[2], NULL)) {
- /* ERROR: BUG */
- *perrc = WXPQDIC_FRAME_ERROR_BUG;
- goto finished;
- }
- if (0 == dk4str8_cat_s(pRequest, szRequest, wxpqdic_kw[1], NULL)) {
- /* ERROR: BUG */
- *perrc = WXPQDIC_FRAME_ERROR_BUG;
- goto finished;
- }
- if (0 == dk4str8_cat_s(pRequest, szRequest, pQueuename, NULL)) {
- /* ERROR: BUG */
- *perrc = WXPQDIC_FRAME_ERROR_BUG;
- goto finished;
- }
- if (0 == dk4str8_cat_s(pRequest, szRequest, wxpqdic_kw[1], NULL)) {
- /* ERROR: BUG */
- *perrc = WXPQDIC_FRAME_ERROR_BUG;
- goto finished;
- }
- if (0 == dk4str8_cat_s(pRequest, szRequest, pUsername, NULL)) {
- /* ERROR: BUG */
- *perrc = WXPQDIC_FRAME_ERROR_BUG;
- goto finished;
- }
- if (0 == dk4str8_cat_s(pRequest, szRequest, wxpqdic_kw[0], NULL)) {
- /* ERROR: BUG */
- *perrc = WXPQDIC_FRAME_ERROR_BUG;
- goto finished;
- }
- szRequest = dk4str8_len(pRequest);
- $? ". request = \"%s\"", TR_8STR(pRequest)
- } else {
- /* ERROR: Memory */
- *perrc = WXPQDIC_FRAME_ERROR_MEMORY;
- goto finished;
- }
- } else {
- /* ERROR: Numeric overflow in size calculation */
- *perrc = WXPQDIC_FRAME_ERROR_SIZE_CALC_OVERFLOW;
- goto finished;
- }
- /*
- Create socket.
- */
- sock = dk4socket_udp_client_for_host(
- aAddresses, pHostname, usPortnumber, usLocalPort, 1, NULL
- );
- if (INVALID_SOCKET == sock) {
- *perrc = WXPQDIC_FRAME_ERROR_SOCKET;
- goto finished;
- }
-
- }
-
- $? ". successfully completed setup"
-
- tLimit->SetLabel(sTexts[27]);
- tUsed->SetLabel(sTexts[27]);
- tAccount->SetLabel(sTexts[27]);
-
- /* Finally indicate success.
- */
- timer.Start(500);
- bIsInitialized = true;
- back = false;
-
- /* Clean up at end and return result.
- */
- finished:
- pAppHelp->ReleaseWxcharStringArray(pv, 6);
- if (back) {
- if (INVALID_SOCKET != sock) {
- dk4socket_close(sock, NULL);
- sock = INVALID_SOCKET;
- }
- dk4mem_release(pUsername);
- dk4mem_release(pQueuename);
- dk4mem_release(pHostname);
- dk4mem_release(pRequest);
- }
- return back;
-}
-
-
-
-void
-WxpqdicFrame::OnIdle(wxIdleEvent & event)
-{
- int errorCode = WXPQDIC_FRAME_ERROR_NONE;
- bool mustClose = false;
- $? "+ OnIdle"
- /* __CHANGE__
- */
- {
- wxCriticalSectionLocker lockCsProtect(csProtect);
- if (bFirstIdle) {
- bFirstIdle = false;
- mustClose = ConfigureAndCheckNeedToClose(&errorCode);
- }
- }
- if (mustClose) { $? "! error in setup, must close window"
- const wxChar *ti;
- const wxChar *tx;
- ti = sTexts[58]; tx = sTexts[59];
- switch (errorCode) {
- case WXPQDIC_FRAME_ERROR_PARSE : {
- ti = sTexts[30]; tx = sTexts[31];
- } break;
- case WXPQDIC_FRAME_ERROR_MEMORY : {
- ti = sTexts[32]; tx = sTexts[33];
- } break;
- case WXPQDIC_FRAME_ERROR_STRCONV_HOSTNAME : {
- ti = sTexts[34]; tx = sTexts[35];
- } break;
- case WXPQDIC_FRAME_ERROR_HOSTNAME : {
- ti = sTexts[36]; tx = sTexts[37];
- } break;
- case WXPQDIC_FRAME_ERROR_STRCONV_QUEUENAME : {
- ti = sTexts[38]; tx = sTexts[39];
- } break;
- case WXPQDIC_FRAME_ERROR_QUEUENAME : {
- ti = sTexts[40]; tx = sTexts[41];
- } break;
- case WXPQDIC_FRAME_ERROR_PORT_OOR : {
- ti = sTexts[42]; tx = sTexts[43];
- } break;
- case WXPQDIC_FRAME_ERROR_PORT_ZERO : {
- ti = sTexts[42]; tx = sTexts[44];
- } break;
- case WXPQDIC_FRAME_ERROR_STRCONV_USERNAME : {
- ti = sTexts[45]; tx = sTexts[46];
- } break;
- case WXPQDIC_FRAME_ERROR_USERNAME : {
- ti = sTexts[47]; tx = sTexts[48];
- } break;
- case WXPQDIC_FRAME_ERROR_LOCALPORT_OOR : {
- ti = sTexts[49]; tx = sTexts[50];
- } break;
- case WXPQDIC_FRAME_ERROR_LOCALPORT_ZERO : {
- ti = sTexts[49]; tx = sTexts[51];
- } break;
- case WXPQDIC_FRAME_ERROR_BUG : {
- ti = sTexts[52]; tx = sTexts[53];
- } break;
- case WXPQDIC_FRAME_ERROR_SIZE_CALC_OVERFLOW : {
- ti = sTexts[54]; tx = sTexts[55];
- } break;
- case WXPQDIC_FRAME_ERROR_SOCKET : {
- ti = sTexts[56]; tx = sTexts[57];
- } break;
- }
- wxMessageBox(tx, ti, (wxICON_ERROR | wxOK), this);
- Show(false);
- Close();
- }
-
- /* Allow idle handlers from the base class.
- */
- $? "- OnIdle"
- event.Skip();
-}
-
-
-void
-WxpqdicFrame::OnTimer(wxTimerEvent & WXUNUSED(event))
-{
- bool mustUpdate = false;
- $? "+ OnTimer"
- {
- wxCriticalSectionLocker lockCsProtect(csProtect);
- $? ". entered critical section"
- if (bIsInitialized) { $? ". already initialized"
- mustUpdate = DataExchangeWithServer();
- }
-#if TRACE_DEBUG
- else { $? "! not yet initialized"
- }
-#endif
- $? ". exiting critical section"
- }
- if (mustUpdate) {
- Refresh();
- Update();
- }
- $? "- OnTimer"
-}
-
-
-
-bool
-WxpqdicFrame::ProcessResponse(bool & found)
-{
- wxChar wxb[16*sizeof(dk4_um_t)];
- char *tokens[8]; /* Tokens in the response */
- const char *ep; /* End part of text */
- dk4_um_t limit; /* Print limit */
- dk4_um_t used; /* Pages used with in limit */
- dk4_um_t account; /* Personal account */
- size_t sz; /* Number of tokens used */
- size_t szwxb; /* Size of wxb */
- int founddet; /* Details found. */
- int res; /* Text to number conversion result */
- int summary; /* Flag: Can print */
- bool force; /* Flag: Force use of values */
- bool back = false;
- $? "+ ProcessResponse"
- sz = dk4str8_tokenize(tokens, 8, bResponse, NULL, NULL);
- if (4 == sz) { $? ". 4 tokens"
- founddet = 0;
- force = bFirstResponse;
- switch (iState) {
- case WXPQDIC_STATE_TIMEOUT :
- case WXPQDIC_STATE_SEND_FAILED :
- {
- force = true; $? ". recover from error"
- } break;
- } $? ". force = %d", (force ? 1 : 0)
- if (0 == dk4str8_cmp("-1", tokens[0])) { $? ". 0 = unlimited"
- limit = DK4_UM_MAX;
- founddet |= 1;
- } else {
- limit = (dk4_um_t)0UL;
- ep = NULL;
- res = dk4ma_input_c8_dec_dk4_um_t(&limit, tokens[0], &ep, 1, NULL);
- if (0 != res) { $? ". 0 = %lu", (unsigned long)limit
- founddet |= 1;
- }
-#if TRACE_DEBUG
- else { $? "! 0 not a number"
- }
-#endif
- }
- used = (dk4_um_t)0UL;
- ep = NULL;
- res = dk4ma_input_c8_dec_dk4_um_t(&used, tokens[1], &ep, 1, NULL);
- if (0 != res) { $? ". 1 = %lu", (unsigned long)used
- founddet |= 2;
- }
-#if TRACE_DEBUG
- else { $? "! 1 not a number"
- }
-#endif
- account = (dk4_um_t)0UL;
- ep = NULL;
- res = dk4ma_input_c8_dec_dk4_um_t(&account, tokens[2], &ep, 1, NULL);
- if (0 != res) { $? ". 2 = %lu", (unsigned long)account
- founddet |= 4;
- }
-#if TRACE_DEBUG
- else { $? "! 2 not a number"
- }
-#endif
- summary = 0;
- ep = NULL;
- res = dk4ma_input_c8_dec_int(&summary, tokens[3], &ep, 1, NULL);
- if (0 != res) { $? ". 3 = %d", summary
- founddet |= 8;
- }
-#if TRACE_DEBUG
- else { $? "! 3 not a number"
- }
-#endif
- if (15 == (15 & founddet)) { $? ". processed successfully"
- /* Renew text labels
- */
-#if DK4_SIZEOF_WXCHAR > 1
- szwxb = DK4_SIZEOF(wxb,wxChar);
- if ((force) || (limit != uLimit)) {
- if (DK4_UM_MAX == limit) {
- tLimit->SetLabel(sTexts[14]);
- } else {
- res = dk4ma_write_wc_decimal_unsigned(wxb, szwxb, limit, 0, NULL);
- if (0 != res) {
- wxString s(wxb);
- tLimit->SetLabel(s);
- }
- }
- back = true;
- }
- if ((force) || (used != uUsed)) {
- res = dk4ma_write_wc_decimal_unsigned(wxb, szwxb, used, 0, NULL);
- if (0 != res) {
- wxString s(wxb);
- tUsed->SetLabel(s);
- }
- back = true;
- }
- if ((force) || (account != uAccount)) {
- res = dk4ma_write_wc_decimal_unsigned(wxb, szwxb, account, 0, NULL);
- if (0 != res) {
- wxString s(wxb);
- tAccount->SetLabel(s);
- }
- back = true;
- }
-#else
- if ((force) || (limit != uLimit)) {
- if (DK4_UM_MAX == limit) {
- tLimit->SetLabel(sTexts[14]);
- } else {
- wxString s(tokens[0]);
- tLimit->SetLabel(s);
- }
- back = true; $? ". update for limit"
- }
- if ((force) || (used != uUsed)) {
- wxString s(tokens[1]);
- tUsed->SetLabel(s);
- back = true; $? ". update for used"
- }
- if ((force) || (account != uAccount)) {
- wxString s(tokens[2]);
- tAccount->SetLabel(s);
- back = true; $? ". update for account"
- }
-#endif
- if ((force) || (summary != iSummary)) {
- wxString s(sTexts[(0 != summary) ? 19 : 20]);
- tAllowed->SetLabel(s);
- if (0 != summary) {
- tAllowed->SetForegroundColour(cGreen);
- } else {
- tAllowed->SetForegroundColour(cRed);
- }
- back = true; $? ". update for summary"
- }
- if (force) {
- lStatus->SetLabel(sNlWx[5]);
- switch (iState) {
- case WXPQDIC_STATE_TIMEOUT :
- case WXPQDIC_STATE_SEND_FAILED :
- {
- lStatus->SetForegroundColour(cBlack);
- } break;
- }
- }
- /* Save values for later comparisons
- */
- uLimit = limit;
- uUsed = used;
- uAccount = account;
- iSummary = summary;
- bFirstResponse = false;
- /* Change state
- */
- iState = WXPQDIC_STATE_OK;
- found = true;
- }
-#if TRACE_DEBUG
- else { $? "! processing failed"
- }
-#endif
- }
-#if TRACE_DEBUG
- else { $? "! not 4 tokens"
- }
-#endif
- $? "- ProcessResponse %d", ((back) ? (1) : (0))
- return back;
-}
-
-
-
-bool
-WxpqdicFrame::RetrieveResponse(void)
-{
- dk4_sockaddr_storage_t remaddr; /* Source address */
- size_t sz; /* Buffer size */
- size_t szrema; /* Address size */
- int res; /* Conversion result */
- bool back = false;
- bool found = false; /* Flag: Found */
- $? "+ RetrieveResponse"
- sz = szResponse;
- szrema = sizeof(remaddr);
- res = dk4socket_recvfrom(
- sock, bResponse, &sz, 0,
- (struct sockaddr *)(&remaddr), &szrema,
- 0L, 10000L, NULL
- );
- switch (res) {
- case DK4_SOCKET_RESULT_SUCCESS :
- case DK4_SOCKET_RESULT_IN_PROGRESS :
- { $? ". data"
- if (0 < sz) { $? ". data length"
- bResponse[(szResponse > sz) ? (sz) : (szResponse - 1)] = '\0';
-#if TRACE_DEBUG
- dk4str8_delnl(bResponse); $? ". response = \"%!8s\"", bResponse
-#endif
- if (1 /* ##### TODO: Compare addresses */ ) { $? ". addr ok"
- back = ProcessResponse(found);
- }
-#if TRACE_DEBUG
- else { $? "! addr mismatch"
- }
-#endif
- }
-#if TRACE_DEBUG
- else { $? "! data length 0"
- }
-#endif
- } break;
- default : { $? ". no data"
- } break;
- }
- if (!(found)) {
- if (WXPQDIC_STATE_SENDED == iState) {
- iState = WXPQDIC_STATE_TIMEOUT;
- tLimit->SetLabel(sTexts[27]);
- tUsed->SetLabel(sTexts[27]);
- tAccount->SetLabel(sTexts[27]);
- tAllowed->SetLabel(sTexts[27]);
- tAllowed->SetForegroundColour(cBlack);
- lStatus->SetLabel(sTexts[29]);
- lStatus->SetForegroundColour(cRed);
- back = true;
- }
- }
- $? "- RetrieveResponse %d", ((back) ? (1) : (0))
- return back;
-}
-
-
-
-bool
-WxpqdicFrame::SendRequest(bool force)
-{
- dk4_time_t currenttime = (dk4_time_t)0UL;
- size_t sz = 0;
- int res = 0;
- bool mustsend = false;
- bool back = false;
- $? "+ SendRequest"
- if ((dk4_time_t)0UL == tRequestSended) {
- mustsend = true;
- } else {
- if (force) {
- mustsend = true;
- } else {
- dk4time_get(&currenttime);
- if ((tRequestSended + (dk4_time_t)lUpdateInterval) <= currenttime) {
- mustsend = true;
- }
- }
- }
- if (mustsend) { $? ". must send"
- sz = szRequest;
- if ((dk4_um_t)0UL == currenttime) {
- dk4time_get(&currenttime);
- }
- res = dk4socket_sendto(
- sock, pRequest, &sz, 0,
- (struct sockaddr *)(&(aAddresses[0])), sizeof(dk4_sockaddr_storage_t),
- 0L, 0L, NULL
- );
- tRequestSended = currenttime;
- switch (res) {
- case DK4_SOCKET_RESULT_SUCCESS :
- case DK4_SOCKET_RESULT_IN_PROGRESS :
- { $? ". success, sended"
- switch (iState) {
- case WXPQDIC_STATE_OK : {
- iState = WXPQDIC_STATE_SENDED;
- } break;
- }
- } break;
- default : { $? "! send"
- if (WXPQDIC_STATE_SEND_FAILED != iState) {
- tLimit->SetLabel(sTexts[27]);
- tUsed->SetLabel(sTexts[27]);
- tAccount->SetLabel(sTexts[27]);
- tAllowed->SetLabel(sTexts[27]);
- lStatus->SetLabel(sTexts[28]);
- lStatus->SetForegroundColour(cRed);
- back = true;
- }
- iState = WXPQDIC_STATE_SEND_FAILED;
- } break;
- }
- }
-#if TRACE_DEBUG
- else { $? ". no need to send"
- }
-#endif
- $? "- SendRequest %d", ((back) ? (1) : (0))
- return back;
-}
-
-
-
-void
-WxpqdicFrame::OnRun(wxCommandEvent & WXUNUSED(event))
-{
- bool mustUpdate = false;
- $? "+ OnRun"
- {
- wxCriticalSectionLocker lockCsProtect(csProtect);
- if (bIsInitialized) {
- mustUpdate = SendRequest(true);
- }
- }
- if (mustUpdate) {
- Refresh();
- Update();
- }
- $? "- OnRun"
-}
-
-
-
-bool
-WxpqdicFrame::DataExchangeWithServer(void)
-{
- bool back = false;
- $? "+ DataExchangeWithServer"
- if (RetrieveResponse()) {
- back = true;
- }
- if (SendRequest()) {
- back = true;
- }
- $? "- DataExchangeWithServer %d", ((back) ? (1) : (0))
- return back;
-}
-