+ harbour/contrib/hbnetio/tests/netiot02.prg
+ added yet another example of NETIO client.
It needs netiosrv executed on the same machine,
see comments inside this code for details.
* harbour/src/rtl/hbznet.c
* move hb_znetOpen() parameter validation from HB_INETCOMPRESS()
to hb_znetOpen() - it should help keeping other code using
hb_znetOpen() more simple
* harbour/contrib/hbnetio/netio.h
* harbour/contrib/hbnetio/netiocli.c
* harbour/contrib/hbnetio/netiosrv.c
+ added support for compression and encryption in NETIO connection
streams. Enabling encryption (password) automatically enable also
compression. If necessary user can set compression level to
HB_ZLIB_COMPRESSION_NONE. HB_ZLIB_COMPRESSION_DISABLE used as
compression level removes compression and encryption.
See below for details of NETIO server and client code modifications.
* harbour/contrib/hbnetio/netiocli.c
+ extended NETIO_CONNECT() client side function parameters:
NETIO_CONNECT( [<cServer>], [<cPort>], [<nTimeOut>], ;
[<cPasswd>], [<nCompressionLevel>], [<nStrategy>] )
-> <lOK>
% changed the behavior of NETIO_CONNECT() client side function.
In the previous version this function was connecting to the server
and then disconnecting so it was used to check if connection is
available and to set default connection parameters.
Now it does not disconnect after successful connection so created
connection is keept and can be reused by any pending NETIO_*() calls.
User can open many different connections in the same time.
The connections are recognized by server and port address.
The connections set by NETIO_CONNECT() function can be closed by
NETIO_DISCONNECT() function.
Each repeated call to NETIO_CONNECT() increase reference counter
in the connection stream and need corresponding number of
NETIO_DISCONNECT() calls.
+ added new PRG client side function:
NETIO_DISCONNECT( [<cServer>], [<cPort>] ) -> <lOK>
which closes connections set by NETIO_CONNECT().
+ added support for passing connection password as part of file path
or function name in format:
<server>[:<port>[:<passwd>]]:<filepath|funcname>
i.e.:
192.168.0.1:2941:secret:path/to/file
Please remember that it's only an alternative method of setting
encryption which does not allow to use CHR(0) or ":" in passwords.
User can always set connection using NETIO_CONNECT() function which
will be used in RPC or FILE IO calls. If more then one connection
is set by NETIO_CONNECT() then user can chose the connection using
only server and port. It's not necessary to pass other connection
parameters.
+ added support for UNC paths:
//<server>[:<port>]/<filepath|funcname>
i.e.:
//192.168.0.1:2941/path/to/file
backslashes (\\) are also supported.
* harbour/contrib/hbnetio/netiosrv.c
% moved 1-st login identification from NETIO_ACCEPT() to NETIO_SERVER()
Such version do not block other connection accepting when server
waits for NETIO_LOGIN frame so it improve scalability and also
protect against code which may want to block access to the server
by opening dummy connections.
+ added new parameters to NETIO_ACCEPT() function which allows to set
encryption and compression for new connections:
NETIO_ACCEPT( <pListenSocket>, [<nTimeOut>],
[<cPass>], [<nCompressionLevel>], [<nStrategy>] )
-> <pConnectionSocket> | NIL
+ added new server side function:
NETIO_COMPRESS( <pConnectionSocket>,
[<cPass>], [<nCompressionLevel>], [<nStrategy>] )
-> NIL
which allow to set or change encryption and compression parameters
in existing connections
* harbour/contrib/hbnetio/netiomt.prg
* updated to accept new connection parameters in NETIO_MTSERVER()
function:
NETIO_MTSERVER( [<nPort>], [<cIfAddr>], [<cRootDir>], [<lRPC>],
[<cPasswd>], [<nCompressionLevel>], [<nStrategy>] )
-> <pListenSocket>
* harbour/contrib/hbnetio/utils/netiosrv.prg
+ added 5-th parameter <passwd> which enable encryption with compression,
current syntx is:
netiosrv [<port>] [<inetaddr>] [<rootdir>] [<rpc>] [<passwd>]
For default values use "" in command line for skipped parameters, i.e.:
netiosrv "" "" "" 1 topsecret
* harbour/contrib/hbnetio/tests/netiotst.prg
* enable RPC, compression and encryption in test code
+ added simple code which use RPC to create directory on the server side
Now it's possible to easy create secure NETIO connections and compression
should help in slow connections when big number of data has to be
exchange. In RDD file access it mostly help when tables use long records.
Hope you will find it useful. Please make tests.
+ contrib/hbide/resources/folder.png
+ Added new image to be placed on "Property Dialog"s
folder selection push buttons.
* contrib/hbide/resources/projectproperties.ui
+ Made resizable. Now it renders more usefulness.
* contrib/hbide/hbide.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideobject.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/idesources.prg
! Fixed and corrected many artifacts.
Mainly in the area of project building, please test.
* contrib/hbide/ideactions.prg
+ Added new action "CloseOther" referenced in the menu, but missing in
IdeActions:loadActions()
* contrib/hbide/idesources.prg
! Reimplemented the method closeAllOthers() because the old code did not
work properly. Please test and report.
* contrib/hbide/idedocks.prg
* contrib/hbide/ideobject.prg
* contrib/hbxbp/xbprtf.prg
! Fixed: double-click on Output Console error information
line now correctly places the editor positions.
The error will not occur in future.
* contrib/hbide/idesources.prg
! Fixed to call ::oIde:updateTitleBar() after close any file. After closing
all the files, the hbIDE was not updating the title bar of the main
window.
* INSTALL
+ Added gcc pkg to opensolaris pkg list.
* harbour.spec
! Do not mark Red Hat and SUSE as discontinued. These names seem
to be used for "enterprise" versions of these distros, but correct
me if I'm wrong.
* utils/hbmk2/hbmk2.pt_BR.po
* utils/hbmk2/hbmk2.hu_HU.po
* utils/hbmk2/hbmk2.prg
+ Made it clean on the help screen which options can only be used
from the command line.
* contrib/hbide/hbide.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/ideobject.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/idesources.prg
* contrib/hbide/idethemes.prg
* contrib/hbide/resources/projectproperties.ui
! Some fixes and code optimizations.
Please report if some feature is not working ok.
* contrib/hbide/hbide.ch
* contrib/hbide/hbide.hbp
* contrib/hbide/hbide.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideobject.prg
* contrib/hbide/ideprojmanager.prg
+ contrib/hbide/idesources.prg
* contrib/hbide/projects/hbide.hbi
! Next round of reforms, may be second-last,
mainly concentrating on accessing the different
components with ease.
! Some formattig and code optimizations.
* contrib/hbqt/hbqt_hbslots.cpp
* contrib/hbqt/hbqt_hbslots.h
+ Added few more slots.
! Improved formatting.
* contrib/hbxbp/xbprtf.prg
! Corrected "undoAvailable(bool)" slot string.
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideobject.prg
+ Implemented context menu in the editor tabs.
Now it is synchronized with toolbar with same look and feel.
+ Implemented to re-position editor tabs with drag.
HOWTO: Place mouse pointer over a tab ->
keep pressed left button ->
move mouse pointer left or right ->
( tab will move with your action ) ->
release left button when desired position is obtained.
* INSTALL
+ Extended Linux deb/rpm sections:
- Added list of base packages
- Listed actual active distro names
- Added pkg install command for various rpm distros
- Added link to webpage containing extensive information
about pkg management commands on different distros
+ Added SUNWsvn package for OpenSolaris.
* harbour.spec
! Typo in comment.
+ Added 'DISCONTINUED' comments to those distros which are
(suprise!) discontinued.
* contrib/hbwin/wapi_winbase.c
! Fixed to set internal getlasterror value in WAPI_FORMATMESSAGE().
Thanks Xavi.
* contrib/hbwin/wapi_err.c
! Fixed to include 'hbwapi.h'
Thanks Xavi again.
* config/global.mk
+ Added autodetection of Gentoo Linux package manager.
* contrib/hbbtree/hb_btree.c
+ Added two TOFIX notes. Both reported on the list previously.
* contrib/hbide/hbide.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideprojmanager.prg
+ Enabled .PPO creation in a tab sharing the other sources.
So all other editing features are available to it.
.ppo is opened in separate tab than the original source.
.ppo is not included in "Recent Files" list and hance
it is not made available at next execution.
* config/global.mk
! Fixed to not require HB_BIN_COMPILE is host and target
platform is the same, host is x64 and target is x86.
x64 hosts can run x86 binaries. (pls shout if you know
any exception)
* INSTALL
+ Added extra info to openSUSE section.
; TODO: Update .rpm/opensuse section.
* harbour.spec
+ Added initialization of HB_USER_DFLAGS.
; TOFIX: Current setup doesn't allow passing -m32 to force 32-bit
.rpm builds on 64-bit systems.
; TOFIX: OpenSUSE 10.2 uses 'gpm' instead of 'gpm-devel'.
* contrib/hbqt/hbqt.hbc
* contrib/hbqt/hbqts.hbc
* Changed to enable -hbcppmm only on win and os2 platforms.
I don't know about linux, but on darwin this option caused
this error:
hbide(70507,0x7fff708a0be0) malloc: *** error for object 0x1019d3948: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap
* contrib/hbqt/hbqt_hbslots.cpp
! Fixed a very bad omission :
if( object->property( signal ).toInt() == i )
=>
if( object->property( signal ).toInt() == i + 1 )
It fixes if an action is not already defined for a widget.
TO WATCH: Is is desirable ?
* contrib/hbxbp/xbpfiledialog.prg
! Small optimization.
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
! Separated toolbar and menu actions, the whole point of
recent reported issues, because toolbar and menu implementation
call different methods with different intensions.
Please test if toolbar and menu option behave correctly.
GROUP DECISION: should I go for QProcess() to manage build phase
or keep Harbour centric implementation as well ? Qt seems to be
proper choice under this context.
* harbour/src/vm/dynsym.c
+ accept also function name (not only symbol index) as parameter
of __DYNSISFUN()
* harbour/src/rtl/hbznet.c
* pacified BCC warnings
* harbour/contrib/hbnetio/netiocli.c
* pacified BCC warning
* harbour/include/hbznet.h
* harbour/src/rtl/hbznet.c
+ added support for blowfish encryption in HB_ZNETSTREAM
+ added C function
void hb_znetEncryptKey( PHB_ZNETSTREAM pStream,
const void * keydata, int keylen );
which enables data encryption in HB_ZNETSTREAM
+ added 4-th parameter to <cPass> to .PRG HB_INETCOMPRESS() function:
HB_INETCOMPRESS( <pSocket>, [<nCompressionLevel>], [<nStrategy>],
[<cPass>] )
<cPass> is initial value to create blowfish key.
Please test.
* contrib/hbqt/hbqt_hbslots.cpp
* contrib/hbqt/hbqt_hbslots.h
+ Added QList<QObject *>listObj member.
There was no guard against an object connected
more than once for the same slot. That's why menu
and toolbar actions were being executed twice.
* contrib/hbqt/qtcore/QSettings.cpp
* contrib/hbqt/qtcore/TQSettings.prg
* contrib/hbqt/qth/QSettings.qth
! Added missing static functions.
* contrib/hbxbp/xbpmenubar.prg
! Extended guard against invalid QAction.
* contrib/hbxbp/xbpwindow.prg
! QPoint() was being accessed without initialization.
* contrib/hbide/ideactions.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idesaveload.prg
! Fixes to execution of menu and toolbar events twice.
! Some more artifacts set right.
* contrib/hbxbp/xbpmenubar.prg
! Fixed nasty bug which was preventing removal of items
with oXbo:delItem().
* contrib/hbxbp/xbpstatusbar.prg
! Removed the parenting of StatusBar as it was being done twice.
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/idestylesheets.prg
* contrib/hbide/idethemes.prg
! Fixed to not flicker main window at start-up.
! Fix to recent files/projects menu.
The issue was related with XbpMenu() class.
! Menu-bar now correctly displays foreground color.
! "Bare Minimum" theme is set as default theme instead of "Pritpal Favourite".
! Fixed many other artifacts.
* config/wce/msvcarm.mk
+ Added -nxcompat and -dynamicbase to .dll link command.
(I'm unsure what -dynamicbase is good for in a .dll, but it's
accepted and set)
! Fixed to add -nxcompat/-dynamicbase for MSVC 2008 and upper.
(it's also possible to use it with MSVS 2005 SP1 though, but
build won't detect this case)
* include/hbwince.h
* Formatting.
* src/vm/dlmalloc.c
! Fixed two potentially uninitialized variables, signaled by MSVC.
* src/common/hbgete.c
+ Changed to use native SetEnvironmentVariable() API instead of
forced ANSI one.
* src/common/hbwince.c
* include/hbwince.h
% Deleted unused ANSI Windows API stubs.
+ Added empty SetEnvironmentVariable() stub for WinCE
builds where it's missing.
* Reconfigured these stubs:
SetCurrentDirectory()
GetCurrentDirectory()
GetComputerName()
GetUserName()
* config/win/global.mk
* Comment updated.
* config/win/msvc.mk
+ Added -nxcompat and -dynamicbase to .dll link command.
(I'm unsure what -dynamicbase is good for in a .dll, but it's
accepted and set)
! Fixed to add -nxcompat/-dynamicbase for MSVC 2008 and upper.
(it's also possible to use it with MSVS 2005 SP1 though, but
build won't detect this case)
* INSTALL
+ Added free SVN book link.
* src/vm/extrap.c
% Marked exception filter callback as 'static'
; TOCHECK: Please verify that OS/2 still works this way.
* src/rtl/oemansi.c
! Fixed two tabs.
* src/rtl/gtwvt/gtwvt.c
* contrib/gtwvg/gtwvg.c
* contrib/rddads/adsfunc.c
! Fixed to not use unsafe/ANSI CharToOemBuffA() API.
; Please review me.
* config/win/mingw.mk
+ Added information about MinGW alternatives for MSVC
security features. Unfortunately they need Cygwin
binary plus some depend on MinGW host platform
and/or version.
* include/hbwince.h
* src/common/hbwince.c
- Deleted CharToOemBuffA(), OemToCharBuffA(). No longer
needed by Harbour.
; TODO: Delete rest of not anymore used ANSI WinAPI
functions. Now Harbour never uses ANSI
WinAPI functions in UNICODE mode.
* config/win/global.mk
- Deleted reference to CharToOemBuffA(), OemToCharBuffA().
* src/vm/extrap.c
* contrib/hbwin/win_prn3.c
+ Added TOFIXes for unsafe function usage:
IsBadWritePtr(), IsBadReadPtr(), lstrlen(), lstrcpy(), lstrcat()
; QUESTION: Any idea how to fix that? win_prn3.c can
probably be fixed with some good general coding
idea.
* contrib/hbwin/wce_smsc.c
! Fixed to not use unsafe CRTL functions.
* src/rtl/oemansi.c
! Rewritten HB_OEMTOANSI() and HB_ANSITOOEM() to not use
Windows API functions marked as unsafe. New version is a bit
slower but won't mark Harbour apps as unsafe in an audit.
; Please test and review.
* utils/hbmk2/hbmk2.prg
* config/wce/msvcarm.mk
* config/win/msvc.mk
% Deleted -Gs MSVC option. Testing with MSVC 2008 I've found
this have no effect on x86 builds, and it makes x64 builds
slighly less efficient by forcing stack checks in each function
call. This seems to contradict MSDN, which doesn't suggest such
difference between x86 and x64:
http://msdn.microsoft.com/en-us/library/9598wk25.aspx
% Deleted -GS- MSVC option used for wce targets for MSVC >= 8.00.
'-GS-' will disable stack cookies (on by default), thus trading
app size/speed for security. Maybe this is preferred for wce
users, but in Harbour I'd rather opt to pass this decision to users
for all targets.
Enable with: HB_USER_CFLAGS=-GS- / -cflag={allmsvc}-GS-
MSDN:
http://msdn.microsoft.com/en-us/library/8dbf701c.aspx
* INSTALL
* Updated valgrind example.
* contrib/hbnetio/utils/netiosrv.hbp
* utils/hbformat/hbformat.hbp
* utils/hbmk2/hbmk2.hbp
* utils/hbi18n/hbi18n.hbp
* utils/hbtest/hbtest.hbp
* utils/hbrun/hbrun.hbp
* config/wce/msvcarm.mk
* config/win/msvc.mk
+ Added MSVC linker switches to enhance security by
enabling NX compatibility and ASLR.
Especially important for server apps like netiosrv and hbrun.
; TODO: Enable the same for MinGW.
; TOCHECK: Please test this with old MSVC versions and MSVCARM,
maybe we will need to disable them in some cases.
; QUESTION: I'm unsure of -fixed:no MSVC option. Do we need it
to increase security?
* config/wce/msvcarm.mk
+ Changed to use link.exe for linking instead of cl[arm].exe.
This now syncs it with rest of Harbour.
* harbour/contrib/hbnetio/netiocli.c
! use hb_vmAtInit() to initialize NETIO - looks that winsock
initialization in startup code does not work - please test
* harbour/src/rtl/hbznet.c
* harbour/include/hbznet.h
* added new optional parameter to hb_znetWrite() function which allow
to catch result of last hb_socketSend() operation
* removed automatic flushing from hb_znetWrite() function,
it should help in implementing more efficient C code using
hb_znet*() functions
* harbour/src/rtl/hbinet.c
* flush HB_ZNETSTREAM output after write operation
% small optimization in internal inet error setting
* harbour/include/hbvmpub.h
* minor formatting
* harbour/contrib/hbnetio/netio.h
* harbour/contrib/hbnetio/netiosrv.c
+ added new PRG function:
NETIO_RPCFUNC( <pConnectionSocket> [, <sFuncSym> ] ) -> NIL
which allows to set user filter for RPC calls. <sFuncSym> is executed
on each RPC request instead of requested function and receives as
first parameter requested function symbol then function parameters.
A simple wrapper may look like:
static function rpc_filter( sFunc, ... )
? "DO", sFunc:name, "WITH", ...
return sFunc:exec( ... )
and can be activated by:
netio_rpcfunc( pConnectionSocket, @rpc_filter() )
When NETIO_RPCFUNC() is called without valid function symbol then
existing user RPC filter is cleared. Please remember that setting
user RPC filter does not automatically enable RPC support for
given connection socket. RPC support has to be enabled by NETIO_RPC()
function or by 4-th parameter of NETIO_LISTEN() socket.
* contrib/hbide/ideactions.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/idestylesheets.prg
! Fixed few more artifacts.
! Recent Files and Projects Menu was growing crazy,
was a result of not deleting the menu item in XbpMenu() class.
More attention is required yet.
! Fixed Viktor's reported bug.
* contrib/hbxbp/xbpmenubar.prg
! Fixed a very bad type, copy/paste syndrome.
* contrib/hbide/projects/hbide.hbi
! Deleted hard-coded -o directive, no longer needed.
! Project paths are now shown without meta-dat.
* contrib/hbide/resources/projectproperties.ui
! Changed components background behavior not to use gradients.
Now it is plain vanila white.
* contrib/hbide/hbide.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideobject.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/idesaveload.prg
* contrib/hbide/idestylesheets.prg
! Another round of reforms. And I am almost done with them. But wait...
! Started implementation of .env concept. What was missing from
hbIDE => hbMK2 were the shell commands minimum necessary to
let hbMK2 engine take control of. Now it can be done via
QProcess:setEnvironment() call. I have left under the commented
code in ideprojmanager.prg:
/* Mechanism to supply environment variables to called process */
/* I do not know nixes but assume that Qt must be issueing proper */
/* shell command for the target OS to set them. */
/* If I am not wrong, HBMK2 can have these variables alread set */
/* and hence developer can choose any compiler of his choice. */
/* */
/* Actually, this was the intension in hbIDE.env I commited in IDE root */
I am been able to compile/link/execute hbIDE.exe after setting ( WinXP )
qListSets := QStringList():new()
qListSets:append( "HB_WITH_QT=c:\qt\4.5.3\lib" )
::qProcess:setEnvironment( qListSets )
just before triggering the process.
Your input is desired as I know nothing about make system.
! Fixed many artifacts difficult to jot-down.
+ Implemented not to load any source until brought forward for view.
This has increased the loading speed extremely fast and always
consistent in timing. This feature was hanging on my drawing board
since begining.
This effectively means that sessions with any number of source tabs
will not pose speed panelty.
TODO: Syntax highlighting is a slow process, to speed-up.
* contrib/hbwin/win_err.c
* contrib/hbwin/hbwin.h
* contrib/hbwin/wapi_winbase_mutex.c
* Changed low-level hbwin_SetLastError() to accept lasterror
as parameter.
* contrib/hbwin/wapi_winbase.c
* contrib/hbwin/wapi_winuser.c
+ Added internal handling of GetLastError(). This fixes lost
GetLastError() values with apps linked with MT HVM.
[ I didn't review wapi_commctrl.c, but some lazy checking
on MSDN showed that these are generally not setting GetLastError(). ]
* WAPI_GETSCROLLRANGE() now set ref params even in case of failure.
; TODO: Do some final renaming and rearrangement on the low-level.
* contrib/hbwin/wapi_winbase_mutex.c
* Formatting.
* mpkg_tgz.sh
! Fixed to detect case when tar is mapped to bsdtar
(such is the case on Snow Leopard). Use slightly modified
tar command in this case.
Please review.
; TOFIX?: Unpacking stub script always uses 'tar', maybe this
needs to be fixed, although current command should
work on Snow Leopard.
- Deleted comment no longer valid.
* utils/hbmk2/hbmk2.prg
! Fixed C++ memory manager override to handle zero size memory
request and added protection when free operations are called
with NULL. Thanks Istvan Bisz and Przemek for input.
* harbour/src/rtl/hbznet.c
! do not use DEF_MEM_LEVEL to avoid potential problems when <zutil.h>
is not available
* harbour/contrib/hbnetio/netio.h
* harbour/contrib/hbnetio/netiocli.c
* harbour/contrib/hbnetio/netiosrv.c
+ implemented RPC in HBNETIO protocol
+ added the following client functions:
check if function/procedure exists on the server side:
NETIO_PROCEXISTS( <cProcName> ) -> <lExists>
execute function/procedure on server the side,
do not wait for confirmation:
NETIO_PROCEXEC( <cProcName> [, <params,...>] ) -> <lSent>
execute function/procedure on the server side and wait for
confirmation:
NETIO_PROCEXECW( <cProcName> [, <params,...>] ) -> <lExecuted>
execute function on the server side and wait for its return value:
NETIO_FUNCEXEC( <cFuncName> [, <params,...>] ) -> <xFuncRetVal>
All above functions use default connection set by NETIO_CONNECT()
for RPCs but it's also possible to specify server address and port
in <cProcName>/<cFuncName> just like in <cFileName> parameter in RDD
functions, i.e.:
NETIO_PROCEXISTS( "192.168.0.1:10005:MYFUNC" )
+ added new server side functions to enable/disable/check RPC support:
NETIO_RPC( <pListenSocket> | <pConnectionSocket> [, <lEnable> ] )
-> <lEnabled>
if RPC is enabled for listen socket then connection sockets inherit
this setting.
+ added 4-th parameter <lRPC> to NETIO_LISTEN() function. .T. enable
RPC support in returned listen socket which is later inherited by
connection sockets
* changed protocol version ID - current NETIO clients and servers
cannot be used with old code
* harbour/contrib/hbnetio/utils/netiosrv.prg
* added option to enable RPC support in NETIO server
If you want to make some test then you can execute netiosrv with
non empty 4-th parameter as server, i.e.:
./netiosrv "" "" "" 1
and try this code as client:
proc main()
// pass server address to netio_connect() for non localhost tests
? "NETIO_CONNECT():", netio_connect()
?
? "DATE() function is supported:", netio_procexists( "DATE" )
? "QOUT() function is supported:", netio_procexists( "DATE" )
? "HB_DATETIME() function is supported:", ;
netio_procexists( "HB_DATETIME" )
?
? netio_procexec( "QOUT", repl( "=", 50 ) )
? netio_procexec( "QOUT", "This is RPC TEST", date(), hb_datetime() )
? netio_procexecw( "QOUT", repl( "=", 50 ) )
?
? "SERVER DATE:", netio_funcexec( "DATE" )
? "SERVER TIME:", netio_funcexec( "TIME" )
? "SERVER DATETIME:", netio_funcexec( "HB_DATETIME" )
?
? netio_funcexec( "upper", "hello world !!!" )
return
Please remember that only functions linked with server are available.
If you want to enabled all core functions in netiosrv then please
uncomment this line in netiosrv.prg:
REQUEST __HB_EXTERN__
Have a fun with a new toy. I hope that many Harbour user will find it
very interesting. Please only be careful !!!. This feature allows to
execute remotely _ANY_ code on the server side. _NEVER_ leave open ports
with RPC support for untrusted access.
* contrib/hbide/hbide.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideprojmanager.prg
! Many artifacts corrected.
! Build process is now very satisfying if selected an
option with right-click on project node in Project Tree window.
! Diabled gradients in any window. Is it ok to fine tune
the windows with plain colors ?