diff --git a/.gitattributes b/.gitattributes index 45bef3fcfc..5056c8e740 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2164,6 +2164,15 @@ packages/fcl-res/xml/versiontypes.xml svneol=native#text/plain packages/fcl-res/xml/winpeimagereader.xml svneol=native#text/plain packages/fcl-web/Makefile svneol=native#text/plain packages/fcl-web/Makefile.fpc svneol=native#text/plain +packages/fcl-web/examples/jsonrpc/demo1/demo.lpi svneol=native#text/plain +packages/fcl-web/examples/jsonrpc/demo1/demo.lpr svneol=native#text/plain +packages/fcl-web/examples/jsonrpc/demo1/echo.in svneol=native#text/plain +packages/fcl-web/examples/jsonrpc/demo1/echobatch.in svneol=native#text/plain +packages/fcl-web/examples/jsonrpc/demo1/extdirect.in svneol=native#text/plain +packages/fcl-web/examples/jsonrpc/demo1/notification.in svneol=native#text/plain +packages/fcl-web/examples/jsonrpc/demo1/wmdemo.lfm svneol=native#text/plain +packages/fcl-web/examples/jsonrpc/demo1/wmdemo.lrs svneol=native#text/plain +packages/fcl-web/examples/jsonrpc/demo1/wmdemo.pp svneol=native#text/plain packages/fcl-web/examples/webdata/demo/createusers.lpi svneol=native#text/plain packages/fcl-web/examples/webdata/demo/createusers.lpr svneol=native#text/plain packages/fcl-web/examples/webdata/demo/extgrid-json.html svneol=native#text/plain diff --git a/packages/fcl-web/Makefile b/packages/fcl-web/Makefile index 169a1ecc5e..39b9b3bcf2 100644 --- a/packages/fcl-web/Makefile +++ b/packages/fcl-web/Makefile @@ -1,10 +1,10 @@ # -# Don't edit, this file is generated by FPCMake Version 2.0.0 [2010/05/22] +# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/11/05] # default: all -MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-solaris x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded mipsel-linux +MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded BSDs = freebsd netbsd openbsd darwin -UNIXs = linux $(BSDs) solaris qnx haiku +UNIXs = linux $(BSDs) solaris qnx LIMIT83fs = go32v2 os2 emx watcom OSNeedsComspecToRunBatch = go32v2 watcom FORCE: @@ -59,11 +59,9 @@ endif endif ifdef COMSPEC ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),) -ifndef RUNBATCH RUNBATCH=$(COMSPEC) /C endif endif -endif ifdef inUnix PATHSEP=/ else @@ -267,187 +265,178 @@ PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(F override PACKAGE_NAME=fcl-web override PACKAGE_VERSION=2.5.1 ifeq ($(FULL_TARGET),i386-linux) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),i386-go32v2) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),i386-win32) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),i386-os2) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),i386-freebsd) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),i386-beos) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),i386-haiku) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),i386-netbsd) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),i386-solaris) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),i386-qnx) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),i386-netware) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),i386-openbsd) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),i386-wdosx) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),i386-darwin) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),i386-emx) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),i386-watcom) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),i386-netwlibc) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),i386-wince) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),i386-embedded) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),i386-symbian) -override TARGET_DIRS+=src/base src/webdata -endif -ifeq ($(FULL_TARGET),i386-nativent) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),m68k-linux) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),m68k-freebsd) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),m68k-netbsd) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),m68k-amiga) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),m68k-atari) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),m68k-openbsd) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),m68k-palmos) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),m68k-embedded) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),powerpc-linux) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),powerpc-netbsd) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),powerpc-amiga) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),powerpc-macos) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),powerpc-darwin) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),powerpc-morphos) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),powerpc-embedded) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),sparc-linux) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),sparc-netbsd) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),sparc-solaris) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),sparc-embedded) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),x86_64-linux) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),x86_64-freebsd) -override TARGET_DIRS+=src/base src/webdata -endif -ifeq ($(FULL_TARGET),x86_64-solaris) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),x86_64-darwin) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),x86_64-win64) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),x86_64-embedded) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),arm-linux) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),arm-palmos) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),arm-darwin) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),arm-wince) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),arm-gba) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),arm-nds) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),arm-embedded) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),arm-symbian) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),powerpc64-linux) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),powerpc64-darwin) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),powerpc64-embedded) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),avr-embedded) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),armeb-linux) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif ifeq ($(FULL_TARGET),armeb-embedded) -override TARGET_DIRS+=src/base src/webdata -endif -ifeq ($(FULL_TARGET),mipsel-linux) -override TARGET_DIRS+=src/base src/webdata +override TARGET_DIRS+=src/base src/webdata src/jsonrpc endif override INSTALL_FPCPACKAGE=y ifeq ($(FULL_TARGET),i386-linux) @@ -510,9 +499,6 @@ endif ifeq ($(FULL_TARGET),i386-symbian) override COMPILER_OPTIONS+=-S2h endif -ifeq ($(FULL_TARGET),i386-nativent) -override COMPILER_OPTIONS+=-S2h -endif ifeq ($(FULL_TARGET),m68k-linux) override COMPILER_OPTIONS+=-S2h endif @@ -576,9 +562,6 @@ endif ifeq ($(FULL_TARGET),x86_64-freebsd) override COMPILER_OPTIONS+=-S2h endif -ifeq ($(FULL_TARGET),x86_64-solaris) -override COMPILER_OPTIONS+=-S2h -endif ifeq ($(FULL_TARGET),x86_64-darwin) override COMPILER_OPTIONS+=-S2h endif @@ -630,9 +613,6 @@ endif ifeq ($(FULL_TARGET),armeb-embedded) override COMPILER_OPTIONS+=-S2h endif -ifeq ($(FULL_TARGET),mipsel-linux) -override COMPILER_OPTIONS+=-S2h -endif ifdef REQUIRE_UNITSDIR override UNITSDIR+=$(REQUIRE_UNITSDIR) endif @@ -1006,10 +986,6 @@ ifeq ($(OS_TARGET),symbian) SHAREDLIBEXT=.dll SHORTSUFFIX=symbian endif -ifeq ($(OS_TARGET),NativeNT) -SHAREDLIBEXT=.dll -SHORTSUFFIX=nativent -endif else ifeq ($(OS_TARGET),go32v1) PPUEXT=.pp1 @@ -1738,18 +1714,6 @@ REQUIRE_PACKAGES_FCL-PROCESS=1 REQUIRE_PACKAGES_HTTPD22=1 REQUIRE_PACKAGES_FASTCGI=1 endif -ifeq ($(FULL_TARGET),i386-nativent) -REQUIRE_PACKAGES_FCL-BASE=1 -REQUIRE_PACKAGES_FCL-XML=1 -REQUIRE_PACKAGES_FCL-DB=1 -REQUIRE_PACKAGES_FCL-JSON=1 -REQUIRE_PACKAGES_FCL-PASSRC=1 -REQUIRE_PACKAGES_FCL-ASYNC=1 -REQUIRE_PACKAGES_FCL-NET=1 -REQUIRE_PACKAGES_FCL-PROCESS=1 -REQUIRE_PACKAGES_HTTPD22=1 -REQUIRE_PACKAGES_FASTCGI=1 -endif ifeq ($(FULL_TARGET),m68k-linux) REQUIRE_PACKAGES_FCL-BASE=1 REQUIRE_PACKAGES_ICONVENC=1 @@ -2087,19 +2051,6 @@ REQUIRE_PACKAGES_FCL-PROCESS=1 REQUIRE_PACKAGES_HTTPD22=1 REQUIRE_PACKAGES_FASTCGI=1 endif -ifeq ($(FULL_TARGET),x86_64-solaris) -REQUIRE_PACKAGES_FCL-BASE=1 -REQUIRE_PACKAGES_FCL-XML=1 -REQUIRE_PACKAGES_FCL-DB=1 -REQUIRE_PACKAGES_FCL-JSON=1 -REQUIRE_PACKAGES_FCL-PASSRC=1 -REQUIRE_PACKAGES_FCL-ASYNC=1 -REQUIRE_PACKAGES_FCL-NET=1 -REQUIRE_PACKAGES_SQLITE=1 -REQUIRE_PACKAGES_FCL-PROCESS=1 -REQUIRE_PACKAGES_HTTPD22=1 -REQUIRE_PACKAGES_FASTCGI=1 -endif ifeq ($(FULL_TARGET),x86_64-darwin) REQUIRE_PACKAGES_UNIVINT=1 REQUIRE_PACKAGES_FCL-BASE=1 @@ -2362,26 +2313,6 @@ REQUIRE_PACKAGES_FCL-PROCESS=1 REQUIRE_PACKAGES_HTTPD22=1 REQUIRE_PACKAGES_FASTCGI=1 endif -ifeq ($(FULL_TARGET),mipsel-linux) -REQUIRE_PACKAGES_FCL-BASE=1 -REQUIRE_PACKAGES_ICONVENC=1 -REQUIRE_PACKAGES_FCL-XML=1 -REQUIRE_PACKAGES_FCL-DB=1 -REQUIRE_PACKAGES_FCL-JSON=1 -REQUIRE_PACKAGES_FCL-PASSRC=1 -REQUIRE_PACKAGES_FCL-ASYNC=1 -REQUIRE_PACKAGES_FCL-NET=1 -REQUIRE_PACKAGES_IBASE=1 -REQUIRE_PACKAGES_POSTGRES=1 -REQUIRE_PACKAGES_MYSQL=1 -REQUIRE_PACKAGES_ODBC=1 -REQUIRE_PACKAGES_ORACLE=1 -REQUIRE_PACKAGES_SQLITE=1 -REQUIRE_PACKAGES_PXLIB=1 -REQUIRE_PACKAGES_FCL-PROCESS=1 -REQUIRE_PACKAGES_HTTPD22=1 -REQUIRE_PACKAGES_FASTCGI=1 -endif ifdef REQUIRE_PACKAGES_FCL-BASE PACKAGEDIR_FCL-BASE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-base/Makefile.fpc,$(PACKAGESDIR)))))) ifneq ($(PACKAGEDIR_FCL-BASE),) @@ -3154,7 +3085,7 @@ ZIPCMD_CDPACK:=cd $(subst /,$(ZIPPATHSEP),$(PACKDIR)) ZIPCMD_CDBASE:=cd $(subst /,$(ZIPPATHSEP),$(BASEDIR)) ifdef USETAR ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(TAREXT) -ZIPCMD_ZIP:=$(TARPROG) c$(TAROPT)f $(ZIPDESTFILE) * +ZIPCMD_ZIP:=$(TARPROG) cf$(TAROPT) $(ZIPDESTFILE) * else ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(ZIPEXT) ZIPCMD_ZIP:=$(subst /,$(ZIPPATHSEP),$(ZIPPROG)) -Dr $(ZIPOPT) $(ZIPDESTFILE) * @@ -3199,9 +3130,6 @@ fpc_zipdistinstall: ifdef EXEFILES override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES)) endif -ifdef CLEAN_PROGRAMS -override CLEANEXEFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEEXT), $(CLEAN_PROGRAMS))) -endif ifdef CLEAN_UNITS override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS)) endif @@ -3248,9 +3176,6 @@ endif ifdef CLEANRSTFILES -$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES)) endif -endif -ifdef CLEAN_FILES - -$(DEL) $(CLEAN_FILES) endif -$(DELTREE) units -$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT) @@ -3377,246 +3302,292 @@ fpc_makefiles: fpc_makefile fpc_makefile_dirs ifeq ($(FULL_TARGET),i386-linux) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),i386-go32v2) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),i386-win32) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),i386-os2) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),i386-freebsd) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),i386-beos) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),i386-haiku) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),i386-netbsd) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),i386-solaris) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),i386-qnx) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),i386-netware) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),i386-openbsd) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),i386-wdosx) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),i386-darwin) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),i386-emx) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),i386-watcom) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),i386-netwlibc) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),i386-wince) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),i386-embedded) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),i386-symbian) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 -endif -ifeq ($(FULL_TARGET),i386-nativent) -TARGET_DIRS_SRC/BASE=1 -TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),m68k-linux) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),m68k-freebsd) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),m68k-netbsd) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),m68k-amiga) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),m68k-atari) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),m68k-openbsd) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),m68k-palmos) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),m68k-embedded) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),powerpc-linux) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),powerpc-netbsd) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),powerpc-amiga) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),powerpc-macos) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),powerpc-darwin) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),powerpc-morphos) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),powerpc-embedded) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),sparc-linux) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),sparc-netbsd) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),sparc-solaris) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),sparc-embedded) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),x86_64-linux) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),x86_64-freebsd) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 -endif -ifeq ($(FULL_TARGET),x86_64-solaris) -TARGET_DIRS_SRC/BASE=1 -TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),x86_64-darwin) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),x86_64-win64) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),x86_64-embedded) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),arm-linux) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),arm-palmos) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),arm-darwin) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),arm-wince) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),arm-gba) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),arm-nds) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),arm-embedded) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),arm-symbian) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),powerpc64-linux) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),powerpc64-darwin) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),powerpc64-embedded) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),avr-embedded) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),armeb-linux) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifeq ($(FULL_TARGET),armeb-embedded) TARGET_DIRS_SRC/BASE=1 TARGET_DIRS_SRC/WEBDATA=1 -endif -ifeq ($(FULL_TARGET),mipsel-linux) -TARGET_DIRS_SRC/BASE=1 -TARGET_DIRS_SRC/WEBDATA=1 +TARGET_DIRS_SRC/JSONRPC=1 endif ifdef TARGET_DIRS_SRC/BASE src/base_all: @@ -3708,6 +3679,51 @@ src/webdata: $(MAKE) -C src/webdata all .PHONY: src/webdata_all src/webdata_debug src/webdata_smart src/webdata_release src/webdata_units src/webdata_examples src/webdata_shared src/webdata_install src/webdata_sourceinstall src/webdata_exampleinstall src/webdata_distinstall src/webdata_zipinstall src/webdata_zipsourceinstall src/webdata_zipexampleinstall src/webdata_zipdistinstall src/webdata_clean src/webdata_distclean src/webdata_cleanall src/webdata_info src/webdata_makefiles src/webdata endif +ifdef TARGET_DIRS_SRC/JSONRPC +src/jsonrpc_all: + $(MAKE) -C src/jsonrpc all +src/jsonrpc_debug: + $(MAKE) -C src/jsonrpc debug +src/jsonrpc_smart: + $(MAKE) -C src/jsonrpc smart +src/jsonrpc_release: + $(MAKE) -C src/jsonrpc release +src/jsonrpc_units: + $(MAKE) -C src/jsonrpc units +src/jsonrpc_examples: + $(MAKE) -C src/jsonrpc examples +src/jsonrpc_shared: + $(MAKE) -C src/jsonrpc shared +src/jsonrpc_install: + $(MAKE) -C src/jsonrpc install +src/jsonrpc_sourceinstall: + $(MAKE) -C src/jsonrpc sourceinstall +src/jsonrpc_exampleinstall: + $(MAKE) -C src/jsonrpc exampleinstall +src/jsonrpc_distinstall: + $(MAKE) -C src/jsonrpc distinstall +src/jsonrpc_zipinstall: + $(MAKE) -C src/jsonrpc zipinstall +src/jsonrpc_zipsourceinstall: + $(MAKE) -C src/jsonrpc zipsourceinstall +src/jsonrpc_zipexampleinstall: + $(MAKE) -C src/jsonrpc zipexampleinstall +src/jsonrpc_zipdistinstall: + $(MAKE) -C src/jsonrpc zipdistinstall +src/jsonrpc_clean: + $(MAKE) -C src/jsonrpc clean +src/jsonrpc_distclean: + $(MAKE) -C src/jsonrpc distclean +src/jsonrpc_cleanall: + $(MAKE) -C src/jsonrpc cleanall +src/jsonrpc_info: + $(MAKE) -C src/jsonrpc info +src/jsonrpc_makefiles: + $(MAKE) -C src/jsonrpc makefiles +src/jsonrpc: + $(MAKE) -C src/jsonrpc all +.PHONY: src/jsonrpc_all src/jsonrpc_debug src/jsonrpc_smart src/jsonrpc_release src/jsonrpc_units src/jsonrpc_examples src/jsonrpc_shared src/jsonrpc_install src/jsonrpc_sourceinstall src/jsonrpc_exampleinstall src/jsonrpc_distinstall src/jsonrpc_zipinstall src/jsonrpc_zipsourceinstall src/jsonrpc_zipexampleinstall src/jsonrpc_zipdistinstall src/jsonrpc_clean src/jsonrpc_distclean src/jsonrpc_cleanall src/jsonrpc_info src/jsonrpc_makefiles src/jsonrpc +endif all: $(addsuffix _all,$(TARGET_DIRS)) debug: $(addsuffix _debug,$(TARGET_DIRS)) smart: $(addsuffix _smart,$(TARGET_DIRS)) diff --git a/packages/fcl-web/Makefile.fpc b/packages/fcl-web/Makefile.fpc index 7baeafab91..c27b4ba697 100644 --- a/packages/fcl-web/Makefile.fpc +++ b/packages/fcl-web/Makefile.fpc @@ -7,7 +7,7 @@ name=fcl-web version=2.5.1 [target] -dirs=src/base src/webdata +dirs=src/base src/webdata src/jsonrpc [require] packages=fcl-base fcl-xml fcl-db fcl-json fcl-net diff --git a/packages/fcl-web/examples/jsonrpc/demo1/demo.lpi b/packages/fcl-web/examples/jsonrpc/demo1/demo.lpi new file mode 100644 index 0000000000..f799e0bd88 --- /dev/null +++ b/packages/fcl-web/examples/jsonrpc/demo1/demo.lpi @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <Icon Value="0"/> + </General> + <VersionInfo> + <Language Value=""/> + <CharSet Value=""/> + <StringTable Comments="" CompanyName="" FileDescription="" FileVersion="" InternalName="" LegalCopyright="" LegalTrademarks="" OriginalFilename="" ProductName="" ProductVersion=""/> + </VersionInfo> + <PublishOptions> + <Version Value="2"/> + <IgnoreBinaries Value="False"/> + <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> + <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> + </local> + </RunParams> + <RequiredPackages Count="3"> + <Item1> + <PackageName Value="WebLaz"/> + </Item1> + <Item2> + <PackageName Value="LCL"/> + </Item2> + <Item3> + <PackageName Value="FCL"/> + </Item3> + </RequiredPackages> + <Units Count="2"> + <Unit0> + <Filename Value="demo.lpr"/> + <IsPartOfProject Value="True"/> + <UnitName Value="demo"/> + </Unit0> + <Unit1> + <Filename Value="wmdemo.pp"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="FPWebModule1"/> + <ResourceBaseClass Value="DataModule"/> + <UnitName Value="wmdemo"/> + </Unit1> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="8"/> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)/"/> + </SearchPaths> + <Parsing> + <SyntaxOptions> + <UseAnsiStrings Value="True"/> + </SyntaxOptions> + </Parsing> + <Linking> + <Debugging> + <UseHeaptrc Value="True"/> + </Debugging> + </Linking> + <Other> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions Count="3"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/packages/fcl-web/examples/jsonrpc/demo1/demo.lpr b/packages/fcl-web/examples/jsonrpc/demo1/demo.lpr new file mode 100644 index 0000000000..de1a7daf3d --- /dev/null +++ b/packages/fcl-web/examples/jsonrpc/demo1/demo.lpr @@ -0,0 +1,16 @@ +program demo; + +{$mode objfpc}{$H+} + +uses + fpCGI, wmdemo; + +// {$R *.res} + + +begin + Application.Title:='FPC JSON-RPC demo'; + Application.Initialize; + Application.Run; +end. + diff --git a/packages/fcl-web/examples/jsonrpc/demo1/echo.in b/packages/fcl-web/examples/jsonrpc/demo1/echo.in new file mode 100644 index 0000000000..8976b3f750 --- /dev/null +++ b/packages/fcl-web/examples/jsonrpc/demo1/echo.in @@ -0,0 +1 @@ +{ "method": "echo", "params": ["Hello JSON-RPC"], "id": 1 } diff --git a/packages/fcl-web/examples/jsonrpc/demo1/echobatch.in b/packages/fcl-web/examples/jsonrpc/demo1/echobatch.in new file mode 100644 index 0000000000..169ffedec0 --- /dev/null +++ b/packages/fcl-web/examples/jsonrpc/demo1/echobatch.in @@ -0,0 +1,4 @@ +[ + { "method": "echo", "params": ["Hello JSON-RPC 1"], "id": 1 }, + { "method": "echo", "params": ["Hello JSON-RPC 2"], "id": 2 } +] \ No newline at end of file diff --git a/packages/fcl-web/examples/jsonrpc/demo1/extdirect.in b/packages/fcl-web/examples/jsonrpc/demo1/extdirect.in new file mode 100644 index 0000000000..831536e29d --- /dev/null +++ b/packages/fcl-web/examples/jsonrpc/demo1/extdirect.in @@ -0,0 +1,4 @@ +[ + { "action": "test", "method": "echo", "data": ["Hello JSON-RPC 1"], "tid": 1 }, + { "action": "test", "method": "echo", "data": ["Hello JSON-RPC 2"], "tid": 2 } +] \ No newline at end of file diff --git a/packages/fcl-web/examples/jsonrpc/demo1/notification.in b/packages/fcl-web/examples/jsonrpc/demo1/notification.in new file mode 100644 index 0000000000..97398bd3bc --- /dev/null +++ b/packages/fcl-web/examples/jsonrpc/demo1/notification.in @@ -0,0 +1 @@ +{ "method": "echo", "params": ["Hello JSON-RPC"], "id": null } diff --git a/packages/fcl-web/examples/jsonrpc/demo1/wmdemo.lfm b/packages/fcl-web/examples/jsonrpc/demo1/wmdemo.lfm new file mode 100644 index 0000000000..22c8cc75b7 --- /dev/null +++ b/packages/fcl-web/examples/jsonrpc/demo1/wmdemo.lfm @@ -0,0 +1,46 @@ +object FPWebModule1: TFPWebModule1 + OnCreate = DataModuleCreate + OldCreateOrder = False + Actions = < + item + Name = 'Manual' + Default = True + OnRequest = TFPWebActions0Request + end + item + Name = 'Dispatch' + Default = False + OnRequest = TFPWebActions1Request + end + item + Name = 'Registered' + Default = False + OnRequest = TFPWebActions2Request + end + item + Name = 'ExtDirect' + Default = False + OnRequest = TFPWebActions3Request + end + item + Name = 'Content' + Default = False + OnRequest = TFPWebActions4Request + end + item + Name = 'ExtDirectAPI' + Default = False + OnRequest = TFPWebActions5Request + end + item + Name = 'Module' + Default = False + OnRequest = TFPWebActions6Request + end> + ActionVar = 'Action' + CreateSession = False + Height = 260 + HorizontalOffset = 578 + VerticalOffset = 373 + Width = 442 +end diff --git a/packages/fcl-web/examples/jsonrpc/demo1/wmdemo.lrs b/packages/fcl-web/examples/jsonrpc/demo1/wmdemo.lrs new file mode 100644 index 0000000000..baec1d8e5c --- /dev/null +++ b/packages/fcl-web/examples/jsonrpc/demo1/wmdemo.lrs @@ -0,0 +1,15 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TFPWebModule1','FORMDATA',[ + 'TPF0'#13'TFPWebModule1'#12'FPWebModule1'#8'OnCreate'#7#16'DataModuleCreate' + +#14'OldCreateOrder'#8#7'Actions'#14#1#4'Name'#6#6'Manual'#7'Default'#9#9'OnR' + +'equest'#7#21'TFPWebActions0Request'#0#1#4'Name'#6#8'Dispatch'#7'Default'#8#9 + +'OnRequest'#7#21'TFPWebActions1Request'#0#1#4'Name'#6#10'Registered'#7'Defau' + +'lt'#8#9'OnRequest'#7#21'TFPWebActions2Request'#0#1#4'Name'#6#9'ExtDirect'#7 + +'Default'#8#9'OnRequest'#7#21'TFPWebActions3Request'#0#1#4'Name'#6#7'Content' + +#7'Default'#8#9'OnRequest'#7#21'TFPWebActions4Request'#0#1#4'Name'#6#12'ExtD' + +'irectAPI'#7'Default'#8#9'OnRequest'#7#21'TFPWebActions5Request'#0#1#4'Name' + +#6#6'Module'#7'Default'#8#9'OnRequest'#7#21'TFPWebActions6Request'#0#0#9'Act' + +'ionVar'#6#6'Action'#13'CreateSession'#8#6'Height'#3#4#1#16'HorizontalOffset' + +#3'B'#2#14'VerticalOffset'#3'u'#1#5'Width'#3#186#1#0#0 +]); diff --git a/packages/fcl-web/examples/jsonrpc/demo1/wmdemo.pp b/packages/fcl-web/examples/jsonrpc/demo1/wmdemo.pp new file mode 100644 index 0000000000..907f7a2bed --- /dev/null +++ b/packages/fcl-web/examples/jsonrpc/demo1/wmdemo.pp @@ -0,0 +1,383 @@ +unit wmdemo; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb; + +type + + { TFPWebModule1 } + + TFPWebModule1 = class(TFPWebModule) + procedure DataModuleCreate(Sender: TObject); + procedure TFPWebActions0Request(Sender: TObject; ARequest: TRequest; + AResponse: TResponse; var Handled: Boolean); + procedure TFPWebActions1Request(Sender: TObject; ARequest: TRequest; + AResponse: TResponse; var Handled: Boolean); + procedure TFPWebActions2Request(Sender: TObject; ARequest: TRequest; + AResponse: TResponse; var Handled: Boolean); + procedure TFPWebActions3Request(Sender: TObject; ARequest: TRequest; + AResponse: TResponse; var Handled: Boolean); + procedure TFPWebActions4Request(Sender: TObject; ARequest: TRequest; + AResponse: TResponse; var Handled: Boolean); + procedure TFPWebActions5Request(Sender: TObject; ARequest: TRequest; + AResponse: TResponse; var Handled: Boolean); + procedure TFPWebActions6Request(Sender: TObject; ARequest: TRequest; + AResponse: TResponse; var Handled: Boolean); + private + { private declarations } + public + { public declarations } + end; + +var + FPWebModule1: TFPWebModule1; + +implementation + +Uses fpjson,jsonparser,fpjsonrpc,webjsonrpc, fpextdirect; + +{ TFPWebModule1 } + +procedure TFPWebModule1.DataModuleCreate(Sender: TObject); +begin +end; + +procedure TFPWebModule1.TFPWebActions0Request(Sender: TObject; + ARequest: TRequest; AResponse: TResponse; var Handled: Boolean); +{ + Demo 1. Manually do everything. + Only a single method call is supported. +} +Var + P : TJSONParser; + Req,Res : TJSONData; + Env,O : TJSONObject; + M : TJSONStringType; + E : TJSONRPCEcho; + I : Integer; + ID : TJSONData; + Err : TJSONData; + +begin + Res:=Nil; + Err:=Nil; + ID:=Nil; + try + P:=TJSONParser.Create(ARequest.Content); + try + Req:=P.Parse; + try + If Not (Req is TJSONObject) then + JSONRPCError(SErrRequestMustBeObject); + O:=(Req as TJSONObject); + I:=O.IndexOfName('id'); + If (I=-1) then + JSONRPCError(SErrNoIDProperty); + ID:=O.Items[i].Clone; + if O.IndexOfName('method')=-1 then + JSONRPCError(SErrNoMethodName); + M:=O.Strings['method']; + If (m<>'echo') then + JSONRPCError('Only echo method is supported'); + E:=TJSONRPCEcho.Create(Self); + try + I:=O.IndexOfName('params'); + Res:=E.Execute(O.Items[i],Nil); + finally + E.Free; + end; + finally + Req.Free; + end; + finally + P.Free; + end; + except + On E : Exception do + Err:=TJSONObject.Create(['message',E.Message,'name',E.ClassName,'code',-1]); + end; + If Assigned(ID) and (ID.JSONType<>jtNull) then + begin + Env:=TJSONObject.Create(); + try + If not Assigned(Res) then + Res:=TJSONNull.Create; + Env.Add('result',Res); + If (Err=Nil) then + Err:=TJSONNull.Create; + Env.Add('error',Err); + Env.Add('id',ID); + AResponse.Content:=Env.AsJSON; + finally + Env.Free; + end; + end; + AResponse.SendContent; + Handled:=True; +end; + +procedure TFPWebModule1.TFPWebActions1Request(Sender: TObject; + ARequest: TRequest; AResponse: TResponse; var Handled: Boolean); + +{ + Demo 2. Use a dispatcher to dispatch the requests. + The handler is located on the owner module + (it is created run-time, though) +} + +Var + Echohandler:TJSONRPCEcho; + Disp : TJSONRPCDispatcher; + P : TJSONParser; + Req,res : TJSONData; + O : TJSONRPCDispatchOptions; + +begin + Echohandler:=TJSONRPCEcho.Create(Self); + try + EchoHandler.Name:='echo'; + Disp:=TJSONRPCDispatcher.Create(Self); + try + O:=Disp.Options; + Include(O,jdoRequireClass); + Disp.Options:=O; + P:= TJSONParser.Create(ARequest.Content); + try + Req:=P.Parse; + try + Res:=Nil; + Res:=Disp.Execute(Req,Nil); + try + If Assigned(Res) then + begin + AResponse.Content:=Res.AsJSON; + end; + AResponse.SendContent; + Handled:=True; + finally + FreeAndNil(Res); + end; + finally + Req.Free; + end; + finally + P.Free; + end; + finally + Disp.Free; + end; + finally + EchoHandler.Free; + end; + +end; + +procedure TFPWebModule1.TFPWebActions2Request(Sender: TObject; + ARequest: TRequest; AResponse: TResponse; var Handled: Boolean); +{ + Demo 3. Use a dispatcher to dispatch the requests, + The handler is registered in the JSONFPCHandlerManager. + (it is created run-time, though) +} + +Var + Disp : TJSONRPCDispatcher; + P : TJSONParser; + Req,res : TJSONData; + O : TJSONRPCDispatchOptions; + +begin + JSONRpcHandlerManager.RegisterHandler('','echo',TJSONRPCEcho); + try + Disp:=TJSONRPCDispatcher.Create(Self); + try + O:=Disp.Options; + Include(O,jdoSearchRegistry); + Disp.Options:=O; + P:= TJSONParser.Create(ARequest.Content); + try + Req:=P.Parse; + try + Res:=Nil; + Res:=Disp.Execute(Req,Nil); + try + If Assigned(Res) then + begin + AResponse.Content:=Res.AsJSON; + end; + AResponse.SendContent; + Handled:=True; + finally + FreeAndNil(Res); + end; + finally + Req.Free; + end; + finally + P.Free; + end; + finally + Disp.Free; + end; + finally + JSONRpcHandlerManager.UnRegisterHandler('','echo'); + end; +end; + +procedure TFPWebModule1.TFPWebActions3Request(Sender: TObject; + ARequest: TRequest; AResponse: TResponse; var Handled: Boolean); + +{ + Demo 4. Ext.Direct dispatcher + The handler is registered in the JSONFPCHandlerManager. + (it is created run-time, though) +} + +Var + Disp : TExtDirectDispatcher; + P : TJSONParser; + Req,res : TJSONData; + O : TJSONRPCDispatchOptions; + +begin + JSONRpcHandlerManager.RegisterHandler('test','echo',TJSONRPCEcho); + try + Disp:=TExtDirectDispatcher.Create(Self); + try + O:=Disp.Options; + Include(O,jdoSearchRegistry); + Disp.Options:=O; + P:= TJSONParser.Create(ARequest.Content); + try + Req:=P.Parse; + try + Res:=Nil; + Res:=Disp.Execute(Req,Nil); + try + If Assigned(Res) then + begin + AResponse.Content:=Res.AsJSON; + end; + AResponse.ContentLength:=Length(AResponse.Content); + AResponse.SendContent; + Handled:=True; + finally + FreeAndNil(Res); + end; + finally + Req.Free; + end; + finally + P.Free; + end; + finally + Disp.Free; + end; + finally + JSONRpcHandlerManager.UnRegisterHandler('','echo'); + end; +end; + +procedure TFPWebModule1.TFPWebActions4Request(Sender: TObject; + ARequest: TRequest; AResponse: TResponse; var Handled: Boolean); + +{ + Demo 5. Using a TJSONRPCContentProducer. + The handler is registered in the JSONFPCHandlerManager. + (it is created run-time, though) +} + +Var + Cont : TJSONRPCContentProducer; + disp : TJSONRPCDispatcher; + +begin + JSONRpcHandlerManager.RegisterHandler('test','echo',TJSONRPCEcho); + try + Cont:=TJSONRPCContentProducer.Create(Self); + try + disp:=TJSONRPCDispatcher.Create(Cont); + Disp.Options:=Disp.OPtions+[jdoSearchRegistry]; + Cont.Dispatcher:=Disp; + AResponse.ContentStream:=TMemoryStream.Create; + try + Cont.GetContent(ARequest,AResponse.ContentStream,Handled); + AResponse.ContentLength:=AResponse.ContentStream.Size; + If Handled then + AResponse.SendContent; + finally + AResponse.ContentStream.Free; + end; + finally + Cont.Free; + end; + finally + JSONRpcHandlerManager.UnRegisterHandler('','echo'); + end; +end; + +procedure TFPWebModule1.TFPWebActions5Request(Sender: TObject; + ARequest: TRequest; AResponse: TResponse; var Handled: Boolean); +{ + Demo 6. creating an API response for Ext.Direct + The handler is registered in the JSONFPCHandlerManager. + (it is created run-time, though) +} + +Var + D : TExtDirectDispatcher; + I : Integer; + +begin + JSONRpcHandlerManager.RegisterHandler('test','echo',TJSONRPCEcho); + try + D:=TExtDirectDispatcher.Create(Self); + try + D.URL:=BaseURL+'ExtDirect'; + D.Options:=D.Options+[jdoSearchRegistry]; + AResponse.Content:=D.APIAsString; + AResponse.ContentLength:=Length(AResponse.Content); + finally + D.Free; + end; + finally + JSONRpcHandlerManager.UnRegisterHandler('','echo'); + end; +end; + +procedure TFPWebModule1.TFPWebActions6Request(Sender: TObject; + ARequest: TRequest; AResponse: TResponse; var Handled: Boolean); +{ + Demo 6. Using a TJSONRPCModule instance to handle the request. + The handler is registered in the JSONFPCHandlerManager. + (it is created run-time, though) +} + +Var + M : TJSONRPCModule; + +begin + JSONRpcHandlerManager.RegisterHandler('test','echo',TJSONRPCEcho); + try + M:=TJSONRPCModule.CreateNew(Self,0); + try + M.HandleRequest(ARequest,AResponse); + Handled:=True; + finally + M.Free; + end; + finally + JSONRpcHandlerManager.UnRegisterHandler('','echo'); + end; +end; + +initialization + {$I wmdemo.lrs} + + RegisterHTTPModule('echo', TFPWebModule1); +end. + diff --git a/packages/fcl-web/fpmake.pp b/packages/fcl-web/fpmake.pp index decae137ea..6920f54124 100644 --- a/packages/fcl-web/fpmake.pp +++ b/packages/fcl-web/fpmake.pp @@ -35,6 +35,7 @@ begin P.SourcePath.Add('src/base'); P.SourcePath.Add('src/webdata'); + P.SourcePath.Add('src/jsonrpc'); T:=P.Targets.AddUnit('cgiapp.pp'); T.ResourceStrings:=true; @@ -152,13 +153,25 @@ begin AddUnit('httpdefs'); AddUnit('fpextjs'); end; - T:=P.Targets.AddUnit('extjsjson.pp'); + T:=P.Targets.AddUnit('extjsjson.pp'); With T.Dependencies do begin AddUnit('fpwebdata'); AddUnit('httpdefs'); AddUnit('fpextjs'); end; + T:=P.Targets.AddUnit('fpjsonrpc.pp'); + T:=P.Targets.AddUnit('webjsonrpc.pp'); + With T.Dependencies do + begin + AddUnit('fpjsonrpc'); + end; + T:=P.Targets.AddUnit('fpextdirect.pp'); + With T.Dependencies do + begin + AddUnit('fpjsonrpc'); + AddUnit('webjsonrpc'); + end; {$ifndef ALLPACKAGES} Run; end; diff --git a/packages/fcl-web/src/base/fphttp.pp b/packages/fcl-web/src/base/fphttp.pp index 10a6ad566c..77073977a4 100644 --- a/packages/fcl-web/src/base/fphttp.pp +++ b/packages/fcl-web/src/base/fphttp.pp @@ -258,6 +258,7 @@ begin M:=TMemoryStream.Create; DoGetContent(ARequest,M,Handled); AResponse.ContentStream:=M; + AResponse.ContentLength:=M.Size; end; procedure THTTPContentProducer.DoGetContent(ARequest: TRequest; Content: TStream; Var Handled : Boolean);