Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2013-04-08 13:12:54 +0400
committerChristophe Romain <christophe.romain@process-one.net>2013-06-13 13:11:02 +0400
commit4d8f7706240a1603468968f47fc7b150b788d62f (patch)
tree92d55d789cc7ac979b3c9e161ffb7f908eba043a /win32
parent4f77348255a16982ffb494b684b061d34db27608 (diff)
Switch to rebar build tool
Use dynamic Rebar configuration Make iconv dependency optional Disable transient_supervisors compile option Add hipe compilation support Only compile ibrowse and lhttpc when needed Make it possible to generate an OTP application release Add --enable-debug compile option Add --enable-all compiler option Add --enable-tools configure option Add --with-erlang configure option. Add --enable-erlang-version-check configure option. Add lager support Improve the test suite
Diffstat (limited to 'win32')
-rw-r--r--win32/CheckReqs.ini20
-rw-r--r--win32/CheckReqs1.ini28
-rw-r--r--win32/CheckReqs1H.ini29
-rw-r--r--win32/CheckService.ini19
-rw-r--r--win32/CheckUser.ini11
-rw-r--r--win32/CheckUserH.ini20
-rw-r--r--win32/ejabberd.cfg167
-rw-r--r--win32/ejabberd.icobin0 -> 2238 bytes
-rw-r--r--win32/ejabberd.nsi770
-rw-r--r--win32/ejabberd_header.bmpbin0 -> 34254 bytes
-rw-r--r--win32/ejabberd_intro.bmpbin0 -> 26494 bytes
-rw-r--r--win32/inetrc1
12 files changed, 1065 insertions, 0 deletions
diff --git a/win32/CheckReqs.ini b/win32/CheckReqs.ini
new file mode 100644
index 000000000..35875f82d
--- /dev/null
+++ b/win32/CheckReqs.ini
@@ -0,0 +1,20 @@
+[Settings]
+NumFields=2
+
+[Field 1]
+Type=label
+Left=0
+Right=-1
+Top=10
+Bottom=70
+Text="Erlang OTP R10B-7 (version 5.4.9) or newer is required to install Ejabberd.\r\n\r\nIt is not found on your computer.\r\n\r\nPlease install Erlang OTP R10B-7 or newer before installing Ejabberd.\r\n\r\nIts installer can be downloaded from"
+
+[Field 2]
+Type=link
+Left=0
+Right=-1
+Top=74
+Bottom=88
+State=http://www.erlang.org/download.html
+Text=http://www.erlang.org/download.html
+
diff --git a/win32/CheckReqs1.ini b/win32/CheckReqs1.ini
new file mode 100644
index 000000000..76b8a9009
--- /dev/null
+++ b/win32/CheckReqs1.ini
@@ -0,0 +1,28 @@
+[Settings]
+NumFields=3
+
+[Field 1]
+Type=label
+Left=0
+Right=-1
+Top=10
+Bottom=70
+Text="OpenSLL 0.9.7i or newer is not found on your computer.\r\n\r\nTo use SSL and TLS encryption you need an SSL certificate. You can create a selfsigned certificate with OpenSSL.\r\n\r\nOpenSLL installer can be downloaded from"
+
+[Field 2]
+Type=link
+Left=0
+Right=-1
+Top=74
+Bottom=88
+State=http://www.slproweb.com/products/Win32OpenSSL.html
+Text=http://www.slproweb.com/products/Win32OpenSSL.html
+
+[Field 3]
+Type=label
+Left=0
+Right=-1
+Top=93
+Bottom=-10
+Text="If you want to continue installing Ejabberd anyway, click Next."
+
diff --git a/win32/CheckReqs1H.ini b/win32/CheckReqs1H.ini
new file mode 100644
index 000000000..36076640d
--- /dev/null
+++ b/win32/CheckReqs1H.ini
@@ -0,0 +1,29 @@
+[Settings]
+NumFields=3
+
+[Field 1]
+Type=label
+Left=0
+Right=-1
+Top=10
+Bottom=70
+Text="OpenSLL 0.9.7i or newer is not found on your computer.\r\n\r\nTo use SSL and TLS encryption you need an SSL certificate. You can create a selfsigned certificate with OpenSSL.\r\n\r\nOpenSLL installer can be downloaded from"
+
+[Field 2]
+Type=link
+Left=0
+Right=-1
+Top=74
+Bottom=88
+State=http://www.slproweb.com/products/Win32OpenSSL.html
+Text=http://www.slproweb.com/products/Win32OpenSSL.html
+
+[Field 3]
+Type=checkbox
+Left=0
+Right=-1
+Top=93
+Bottom=105
+Text="I want to continue installing Ejabberd anyway"
+State=0
+Flags=NOTIFY
diff --git a/win32/CheckService.ini b/win32/CheckService.ini
new file mode 100644
index 000000000..764832469
--- /dev/null
+++ b/win32/CheckService.ini
@@ -0,0 +1,19 @@
+[Settings]
+NumFields=2
+
+[Field 1]
+Type=label
+Left=0
+Right=-1
+Top=10
+Bottom=50
+Text="You are installing Ejabberd as Administrator.\r\n\r\nEjabberd will be installed as a Windows service."
+
+[Field 2]
+Type=checkbox
+Left=0
+Right=-1
+Top=50
+Bottom=62
+Text="Configure ejabberd service to start automatically"
+State=1
diff --git a/win32/CheckUser.ini b/win32/CheckUser.ini
new file mode 100644
index 000000000..3352d69d2
--- /dev/null
+++ b/win32/CheckUser.ini
@@ -0,0 +1,11 @@
+[Settings]
+NumFields=1
+
+[Field 1]
+Type=label
+Left=0
+Right=-1
+Top=10
+Bottom=-10
+Text="Administrator privileges are recommended for Ejabberd install.\r\n\r\nOtherwise installing Ejabberd as a service will be impossible.\r\n\r\nIf you want to continue installing Ejabberd anyway, click Next."
+
diff --git a/win32/CheckUserH.ini b/win32/CheckUserH.ini
new file mode 100644
index 000000000..741bada22
--- /dev/null
+++ b/win32/CheckUserH.ini
@@ -0,0 +1,20 @@
+[Settings]
+NumFields=2
+
+[Field 1]
+Type=label
+Left=0
+Right=-1
+Top=10
+Bottom=50
+Text="Administrator privileges are recommended for Ejabberd install.\r\n\r\nOtherwise installing Ejabberd as a service will be impossible."
+
+[Field 2]
+Type=checkbox
+Left=0
+Right=-1
+Top=50
+Bottom=62
+Text="I want to continue installing Ejabberd anyway"
+State=0
+Flags=NOTIFY
diff --git a/win32/ejabberd.cfg b/win32/ejabberd.cfg
new file mode 100644
index 000000000..7ba191be0
--- /dev/null
+++ b/win32/ejabberd.cfg
@@ -0,0 +1,167 @@
+% $Id$
+
+%override_acls.
+
+
+% Users that have admin access. Add line like one of the following after you
+% will be successfully registered on server to get admin access:
+%{acl, admin, {user, "aleksey"}}.
+%{acl, admin, {user, "ermine"}}.
+
+% Blocked users:
+%{acl, blocked, {user, "test"}}.
+
+% Local users:
+{acl, local, {user_regexp, ""}}.
+
+% Another examples of ACLs:
+%{acl, jabberorg, {server, "jabber.org"}}.
+%{acl, aleksey, {user, "aleksey", "jabber.ru"}}.
+%{acl, test, {user_regexp, "^test"}}.
+%{acl, test, {user_glob, "test*"}}.
+
+
+% Only admins can use configuration interface:
+{access, configure, [{allow, admin}]}.
+
+% Every username can be registered via in-band registration:
+{access, register, [{allow, all}]}.
+
+% After successful registration user will get message with following subject
+% and body:
+{welcome_message,
+ {"Welcome!",
+ "Welcome to Jabber Service. "
+ "For information about Jabber visit http://jabber.org"}}.
+% Replace them with 'none' if you don't want to send such message:
+%{welcome_message, none}.
+
+% List of people who will get notifications about registered users
+%{registration_watchers, ["admin1@localhost",
+% "admin2@localhost"]}.
+
+% Only admins can send announcement messages:
+{access, announce, [{allow, admin}]}.
+
+
+% Only non-blocked users can use c2s connections:
+{access, c2s, [{deny, blocked},
+ {allow, all}]}.
+
+% Set shaper with name "normal" to limit traffic speed to 1000B/s
+{shaper, normal, {maxrate, 1000}}.
+
+% Set shaper with name "fast" to limit traffic speed to 50000B/s
+{shaper, fast, {maxrate, 50000}}.
+
+% For all users except admins used "normal" shaper
+{access, c2s_shaper, [{none, admin},
+ {normal, all}]}.
+
+% For all S2S connections used "fast" shaper
+{access, s2s_shaper, [{fast, all}]}.
+
+% Admins of this server are also admins of MUC service:
+{access, muc_admin, [{allow, admin}]}.
+
+% All users are allowed to use MUC service:
+{access, muc, [{allow, all}]}.
+
+% This rule allows access only for local users:
+{access, local, [{allow, local}]}.
+
+
+% Authentification method. If you want to use internal user base, then use
+% this line:
+{auth_method, internal}.
+
+% For LDAP authentification use these lines instead of above one:
+%{auth_method, ldap}.
+%{ldap_servers, ["localhost"]}. % List of LDAP servers
+%{ldap_uidattr, "uid"}. % LDAP attribute that holds user ID
+%{ldap_base, "dc=example,dc=com"}. % Base of LDAP directory
+%{ldap_rootdn, "dc=example,dc=com"}. % LDAP manager
+%{ldap_password, "******"}. % Password to LDAP manager
+
+% For authentification via external script use the following:
+%{auth_method, external}.
+%{extauth_program, "/path/to/authentification/script"}.
+
+% For authentification via ODBC use the following:
+%{auth_method, odbc}.
+%{odbc_server, "DSN=ejabberd;UID=ejabberd;PWD=ejabberd"}.
+
+
+% Host name(s):
+{hosts, ["localhost"]}.
+
+% Default language:
+{language, "en"}.
+
+% Listened ports:
+{listen,
+ [
+ {5222, ejabberd_c2s, [{access, c2s},
+ {shaper, c2s_shaper}]},
+
+% To create selfsigned certificate run the following command from the
+% command prompt:
+%
+% openssl req -new -x509 -days 365 -nodes -out ejabberd.pem -keyout ejabberd.pem
+%
+% and answer the questions.
+% {5222, ejabberd_c2s, [{access, c2s},
+% starttls, {certfile, "./ejabberd.pem"},
+% {shaper, c2s_shaper}]},
+
+% When using SSL/TLS ssl option is not recommended (it requires patching
+% erlang ssl application). Use tls option instead (as shown below).
+% {5223, ejabberd_c2s, [{access, c2s},
+% tls, {certfile, "./ejabberd.pem"},
+% {shaper, c2s_shaper}]},
+
+ {5269, ejabberd_s2s_in, [{shaper, s2s_shaper}]},
+
+% {5555, ejabberd_service, [{access, all},
+% {host, "icq.localhost", [{password, "secret"}]}]},
+
+ {5280, ejabberd_http, [http_poll, web_admin]}
+ ]}.
+
+% If SRV lookup fails, then port 5269 is used to communicate with remote server
+{outgoing_s2s_port, 5269}.
+
+
+% Used modules:
+{modules,
+ [
+ {mod_register, [{access, register}]},
+ {mod_roster, []},
+ {mod_shared_roster, []},
+ {mod_privacy, []},
+ {mod_configure, []},
+ {mod_disco, []},
+ {mod_stats, []},
+ {mod_vcard, []},
+ {mod_offline, []},
+ {mod_announce, [{access, announce}]},
+ {mod_private, []},
+ {mod_irc, []},
+% Default options for mod_muc:
+% host: "conference." ++ ?MYNAME
+% access: all
+% access_create: all
+% access_admin: none (only room creator has owner privileges)
+ {mod_muc, [{access, muc},
+ {access_create, muc},
+ {access_admin, muc_admin}]},
+ {mod_pubsub, []},
+ {mod_time, []},
+ {mod_last, []},
+ {mod_version, []}
+ ]}.
+
+
+% Local Variables:
+% mode: erlang
+% End:
diff --git a/win32/ejabberd.ico b/win32/ejabberd.ico
new file mode 100644
index 000000000..0a572d7f4
--- /dev/null
+++ b/win32/ejabberd.ico
Binary files differ
diff --git a/win32/ejabberd.nsi b/win32/ejabberd.nsi
new file mode 100644
index 000000000..26fdb0618
--- /dev/null
+++ b/win32/ejabberd.nsi
@@ -0,0 +1,770 @@
+; NSIS Modern User Interface
+; Ejabberd installation script
+
+;--------------------------------
+;Include Modern UI
+
+ !include "MUI.nsh"
+ !include "ejabberd.nsh" ; All release specific parameters come from this
+
+;--------------------------------
+;General
+
+ ;Name and file
+ !define PRODUCT "Ejabberd"
+ Name ${PRODUCT}
+ OutFile "${OUTFILEDIR}\${PRODUCT}-${VERSION}.exe"
+ ShowInstDetails show
+ ShowUninstDetails show
+
+ !define MUI_ICON "ejabberd.ico"
+ !define MUI_UNICON "ejabberd.ico"
+ !define MUI_HEADERIMAGE
+ !define MUI_HEADERIMAGE_BITMAP "ejabberd_header.bmp"
+ !define MUI_WELCOMEFINISHPAGE_BITMAP "ejabberd_intro.bmp"
+
+
+;--------------------------------
+;Configuration
+
+ SetCompressor lzma
+
+;--------------------------------
+;Reserve Files
+
+ ReserveFile "ejabberd.ico"
+ ReserveFile "ejabberd.ico"
+ ReserveFile "ejabberd_header.bmp"
+ ReserveFile "ejabberd_intro.bmp"
+ !ifdef HACKED_INSTALLOPTIONS
+ ReserveFile "CheckUserH.ini"
+ ReserveFile "CheckReqs1H.ini"
+ !else
+ ReserveFile "CheckUser.ini"
+ ReserveFile "CheckReqs1.ini"
+ !endif
+ ReserveFile "CheckReqs.ini"
+ ReserveFile "CheckService.ini"
+ !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
+
+;--------------------------------
+;Variables
+
+ Var MUI_TEMP
+ Var STARTMENU_FOLDER
+ Var ADMIN
+ Var ENABLE_SERVICE
+ Var ERLANG_PATH
+ Var ERLANG_VERSION
+ Var REQUIRED_ERLANG_VERSION
+ Var OPENSSL_PATH
+ Var OPENSSL_VERSION
+ Var REQUIRED_OPENSSL_VERSION
+ Var ERLSRV
+
+;----------------------------------------------------------
+;.onInit uses UserInfo plugin, so it's as high as possible
+
+Function .onInit
+
+ StrCpy $REQUIRED_ERLANG_VERSION "5.4.9"
+ StrCpy $REQUIRED_OPENSSL_VERSION "0.9.7c"
+
+ ;Default installation folder
+ StrCpy $INSTDIR "$PROGRAMFILES\${PRODUCT}"
+
+ ;Get installation folder from registry if available
+ ClearErrors
+ ReadRegStr $0 HKLM "SOFTWARE\${PRODUCT}" ""
+ IfErrors 0 copydir
+ ReadRegStr $0 HKCU "SOFTWARE\${PRODUCT}" ""
+ IfErrors skipdir
+ copydir:
+ StrCpy $INSTDIR "$0"
+
+ skipdir:
+ ;Extract InstallOptions INI files
+ !ifdef HACKED_INSTALLOPTIONS
+ !insertmacro MUI_INSTALLOPTIONS_EXTRACT "CheckUserH.ini"
+ !insertmacro MUI_INSTALLOPTIONS_EXTRACT "CheckReqs1H.ini"
+ !else
+ !insertmacro MUI_INSTALLOPTIONS_EXTRACT "CheckUser.ini"
+ !insertmacro MUI_INSTALLOPTIONS_EXTRACT "CheckReqs1.ini"
+ !endif
+ !insertmacro MUI_INSTALLOPTIONS_EXTRACT "CheckReqs.ini"
+ !insertmacro MUI_INSTALLOPTIONS_EXTRACT "CheckService.ini"
+
+ ClearErrors
+ UserInfo::GetName
+ IfErrors admin
+ Pop $0
+ UserInfo::GetAccountType
+ Pop $1
+ StrCmp $1 "Admin" admin user
+
+ admin:
+ StrCpy $ADMIN 1
+ Goto skip
+
+ user:
+ StrCpy $ADMIN 0
+
+ skip:
+
+FunctionEnd
+
+;--------------------------------
+;Interface Settings
+
+ !define MUI_ABORTWARNING
+
+;--------------------------------
+;Installer/Uninstaller pages
+
+ !insertmacro MUI_PAGE_WELCOME
+ !insertmacro MUI_PAGE_LICENSE "..\..\COPYING"
+ Page custom CheckReqs LeaveCheckReqs
+ Page custom CheckReqs1 LeaveCheckReqs1
+ Page custom CheckUser LeaveCheckUser
+ Page custom CheckService LeaveCheckService
+ ;!insertmacro MUI_PAGE_COMPONENTS
+ !insertmacro MUI_PAGE_DIRECTORY
+
+ !insertmacro MUI_PAGE_STARTMENU ${PRODUCT} $STARTMENU_FOLDER
+
+ !insertmacro MUI_PAGE_INSTFILES
+
+ !insertmacro MUI_UNPAGE_WELCOME
+ !insertmacro MUI_UNPAGE_CONFIRM
+ !insertmacro MUI_UNPAGE_INSTFILES
+
+;--------------------------------
+;Languages
+
+ !insertmacro MUI_LANGUAGE "English"
+
+;--------------------------------
+;Language Strings
+
+;Description
+
+ LangString DESC_SecEjabberd ${LANG_ENGLISH} "Erlang jabber server."
+
+;--------------------------------
+;Installer Sections
+
+Section "Ejabberd" SecEjabberd
+SectionIn 1 RO
+
+ SetOutPath "$INSTDIR"
+ File /r "${TESTDIR}\doc"
+ File /r "${TESTDIR}\ebin"
+ File /r "${TESTDIR}\msgs"
+ File /r "${TESTDIR}\win32"
+ File "${TESTDIR}\*.dll"
+ File "${TESTDIR}\inetrc"
+ File /oname=ejabberd.cfg.example "${TESTDIR}\ejabberd.cfg"
+ SetOverwrite off
+ File "${TESTDIR}\ejabberd.cfg"
+ SetOverwrite on
+ ;File /r "${TESTDIR}\src"
+ CreateDirectory "$INSTDIR\log"
+
+;The startmenu stuff
+ !insertmacro MUI_STARTMENU_WRITE_BEGIN ${PRODUCT}
+
+ ;Create shortcuts
+ StrCpy $0 "$SMPROGRAMS\$STARTMENU_FOLDER"
+ CreateDirectory "$0"
+ CreateShortCut "$0\Start Ejabberd.lnk" "$ERLANG_PATH\bin\werl.exe" \
+ '-sname ejabberd -pa ebin \
+ -env EJABBERD_LOG_PATH log/ejabberd.log \
+ -s ejabberd -kernel inetrc \"./inetrc\" -mnesia dir \"spool\" \
+ -sasl sasl_error_logger {file,\"log/erlang.log\"}' \
+ $INSTDIR\win32\ejabberd.ico
+ CreateShortCut "$0\Edit Config.lnk" "%SystemRoot%\system32\notepad.exe" \
+ "$INSTDIR\ejabberd.cfg"
+ CreateShortCut "$0\Read Docs.lnk" "$INSTDIR\doc\guide.html"
+ CreateShortCut "$0\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
+
+ !insertmacro MUI_STARTMENU_WRITE_END
+
+;Create Windows service
+ StrCmp $ADMIN 1 0 skipservice
+
+ StrCpy $ERLSRV ""
+ Push $ERLANG_PATH
+ Push erlsrv.exe
+ GetFunctionAddress $0 FFCallback
+ Push $0
+ Call FindFiles
+
+ StrCmp $ERLSRV "" skipservice
+
+ nsExec::Exec '"$ERLSRV" list ejabberd'
+ Pop $0
+ StrCmp $0 "error" skipservice
+ StrCmp $0 "0" 0 installsrv
+
+ nsExec::ExecToLog '"$ERLSRV" remove ejabberd'
+ Pop $0
+
+ installsrv:
+ nsExec::ExecToLog '"$ERLSRV" add ejabberd -stopaction "init:stop()." \
+ -onfail restart -workdir "$INSTDIR" \
+ -args "-s ejabberd -pa ebin \
+ -kernel inetrc \\\"./inetrc\\\" \
+ -env EJABBERD_LOG_PATH log/ejabberd.log \
+ -sasl sasl_error_logger {file,\\\"log/erlang.log\\\"} \
+ -mnesia dir \\\"spool\\\"" -d'
+ Pop $0
+
+ StrCmp $ENABLE_SERVICE 0 0 skipservice
+ nsExec::ExecToLog '"$ERLSRV" disable ejabberd'
+ Pop $0
+
+ skipservice:
+
+ ;Create uninstaller
+ WriteUninstaller "$INSTDIR\Uninstall.exe"
+
+ StrCpy $1 "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT}"
+ StrCmp $ADMIN 1 admin2
+
+ WriteRegStr HKCU "Software\${PRODUCT}" "" "$INSTDIR"
+ WriteRegStr HKCU "$1" "DisplayName" "${PRODUCT} ${VERSION}"
+ WriteRegStr HKCU "$1" "UninstallString" "$INSTDIR\Uninstall.exe"
+ WriteRegDWORD HKCU "$1" "NoModify" 1
+ WriteRegDWORD HKCU "$1" "NoRepair" 1
+ Goto done2
+
+ admin2:
+ WriteRegStr HKLM "Software\${PRODUCT}" "" "$INSTDIR"
+ WriteRegStr HKLM "Software\${PRODUCT}" "Erlsrv" "$ERLSRV"
+ WriteRegStr HKLM "$1" "DisplayName" "${PRODUCT} ${VERSION}"
+ WriteRegStr HKLM "$1" "UninstallString" "$INSTDIR\Uninstall.exe"
+ WriteRegDWORD HKLM "$1" "NoModify" 1
+ WriteRegDWORD HKLM "$1" "NoRepair" 1
+
+ done2:
+
+SectionEnd ; SecEjabberd
+
+Function FFCallback
+
+ Exch $0
+ StrCpy $ERLSRV $0
+ Pop $0
+ Push "stop"
+
+FunctionEnd
+
+;--------------------------------
+;Descriptions
+
+ !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
+ !insertmacro MUI_DESCRIPTION_TEXT ${SecEjabberd} $(DESC_SecEjabberd)
+ !insertmacro MUI_FUNCTION_DESCRIPTION_END
+
+;--------------------------------
+;Uninstaller Section
+
+Section "Uninstall"
+
+ ClearErrors
+ UserInfo::GetName
+ IfErrors admin
+ Pop $0
+ UserInfo::GetAccountType
+ Pop $1
+ StrCmp $1 "Admin" admin
+
+ StrCpy $ADMIN 0
+ Goto skipservice
+
+ admin:
+ StrCpy $ADMIN 1
+ ReadRegStr $ERLSRV HKLM "Software\${PRODUCT}" "Erlsrv"
+
+ nsExec::Exec '"$ERLSRV" list ejabberd'
+ Pop $0
+ StrCmp $0 "error" skipservice
+ StrCmp $0 "0" 0 skipservice
+
+ nsExec::ExecToLog '"$ERLSRV" remove ejabberd'
+ Pop $0
+
+ skipservice:
+ RMDir /r "$INSTDIR\doc"
+ RMDir /r "$INSTDIR\ebin"
+ RMDir /r "$INSTDIR\msgs"
+ RMDir /r "$INSTDIR\win32"
+ ;RMDir /r "$INSTDIR\src"
+ RMDir /r "$INSTDIR\log"
+ Delete "$INSTDIR\*.dll"
+ Delete "$INSTDIR\inetrc"
+ Delete "$INSTDIR\ejabberd.cfg.example"
+ Delete "$INSTDIR\Uninstall.exe"
+ RMDir "$INSTDIR"
+
+ !insertmacro MUI_STARTMENU_GETFOLDER ${PRODUCT} $MUI_TEMP
+
+ Delete "$SMPROGRAMS\$MUI_TEMP\Start Ejabberd.lnk"
+ Delete "$SMPROGRAMS\$MUI_TEMP\Edit Config.lnk"
+ Delete "$SMPROGRAMS\$MUI_TEMP\Read Docs.lnk"
+ Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
+
+ ;Delete empty start menu parent diretories
+ StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
+
+ startMenuDeleteLoop:
+ RMDir $MUI_TEMP
+ GetFullPathName $MUI_TEMP "$MUI_TEMP\.."
+
+ IfErrors startMenuDeleteLoopDone
+
+ StrCmp $MUI_TEMP $SMPROGRAMS startMenuDeleteLoopDone startMenuDeleteLoop
+ startMenuDeleteLoopDone:
+
+ StrCpy $1 "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT}"
+ StrCmp $ADMIN 1 admin1
+ DeleteRegKey HKCU "Software\${PRODUCT}"
+ DeleteRegKey HKCU $1
+ Goto done
+ admin1:
+ DeleteRegKey HKLM "Software\${PRODUCT}"
+ DeleteRegKey HKLM $1
+
+ done:
+
+SectionEnd
+
+LangString TEXT_CU_TITLE ${LANG_ENGLISH} "Checking User Privileges"
+LangString TEXT_CU_SUBTITLE ${LANG_ENGLISH} "Checking user privileged required to install Ejabberd."
+
+Function CheckUser
+
+ StrCmp $ADMIN 1 0 showpage
+ Abort
+
+ showpage:
+ !insertmacro MUI_HEADER_TEXT $(TEXT_CU_TITLE) $(TEXT_CU_SUBTITLE)
+
+ !ifdef HACKED_INSTALLOPTIONS
+ !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "CheckUserH.ini"
+ !insertmacro MUI_INSTALLOPTIONS_READ $0 "CheckUserH.ini" "Field 2" "State"
+ GetDlgItem $1 $HWNDPARENT 1
+ EnableWindow $1 $0
+ !else
+ !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "CheckUser.ini"
+ !endif
+
+ !insertmacro MUI_INSTALLOPTIONS_SHOW
+
+FunctionEnd
+
+Function LeaveCheckUser
+
+ !ifdef HACKED_INSTALLOPTIONS
+ !insertmacro MUI_INSTALLOPTIONS_READ $0 "CheckUserH.ini" "Settings" "State"
+ StrCmp $0 0 validate ;Next button?
+ StrCmp $0 2 checkbox ;checkbox?
+ Abort ;Return to the page
+
+ checkbox:
+ !insertmacro MUI_INSTALLOPTIONS_READ $0 "CheckUserH.ini" "Field 2" "State"
+ GetDlgItem $1 $HWNDPARENT 1
+ EnableWindow $1 $0
+ Abort
+
+ validate:
+ !endif
+
+FunctionEnd
+
+LangString TEXT_CU_TITLE ${LANG_ENGLISH} "Configuring Ejabberd Service"
+LangString TEXT_CU_SUBTITLE ${LANG_ENGLISH} "Configuring Ejabberd Service."
+
+Function CheckService
+
+ StrCmp $ADMIN 0 0 showpage
+ Abort
+
+ showpage:
+ !insertmacro MUI_HEADER_TEXT $(TEXT_CU_TITLE) $(TEXT_CU_SUBTITLE)
+
+ !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "CheckService.ini"
+
+ !insertmacro MUI_INSTALLOPTIONS_SHOW
+
+FunctionEnd
+
+Function LeaveCheckService
+
+ !insertmacro MUI_INSTALLOPTIONS_READ $0 "CheckService.ini" "Field 2" "State"
+ StrCmp $0 0 0 autostart
+ StrCpy $ENABLE_SERVICE 0
+ Goto endfun
+
+ autostart:
+ StrCpy $ENABLE_SERVICE 1
+
+ endfun:
+
+FunctionEnd
+
+LangString TEXT_CR_TITLE ${LANG_ENGLISH} "Unsatisfied Requirements"
+LangString TEXT_CR_SUBTITLE ${LANG_ENGLISH} "Unsatisfied Ejabberd requirements found."
+
+Function CheckReqs
+
+ Push "HKLM"
+ Call FindErlang
+ Pop $ERLANG_PATH
+ Pop $ERLANG_VERSION
+ StrCmp $ERLANG_PATH "" 0 abort
+ Push "HKCU"
+ Call FindErlang
+ Pop $ERLANG_PATH
+ Pop $ERLANG_VERSION
+ StrCmp $ERLANG_PATH "" 0 abort
+
+ !insertmacro MUI_HEADER_TEXT $(TEXT_CR_TITLE) $(TEXT_CR_SUBTITLE)
+
+ !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "CheckReqs.ini"
+ GetDlgItem $R0 $HWNDPARENT 1
+ EnableWindow $R0 0
+
+
+ !insertmacro MUI_INSTALLOPTIONS_SHOW
+
+ abort:
+ Abort
+
+FunctionEnd
+
+Function LeaveCheckReqs
+
+ Abort
+
+FunctionEnd
+
+Function CheckReqs1
+
+ Push "HKLM"
+ Call FindOpenSSL
+ Pop $OPENSSL_PATH
+ Pop $OPENSSL_VERSION
+ StrCmp $OPENSSL_PATH "" 0 abort
+ Push "HKCU"
+ Call FindOpenSSL
+ Pop $OPENSSL_PATH
+ Pop $OPENSSL_VERSION
+ StrCmp $OPENSSL_PATH "" 0 abort
+
+ !insertmacro MUI_HEADER_TEXT $(TEXT_CR_TITLE) $(TEXT_CR_SUBTITLE)
+
+ !ifdef HACKED_INSTALLOPTIONS
+ !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "CheckReqs1H.ini"
+ !insertmacro MUI_INSTALLOPTIONS_READ $0 "CheckReqs1H.ini" "Field 3" "State"
+ GetDlgItem $1 $HWNDPARENT 1
+ EnableWindow $1 $0
+ !else
+ !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "CheckReqs1.ini"
+ !endif
+
+ !insertmacro MUI_INSTALLOPTIONS_SHOW
+
+ abort:
+ Abort
+
+FunctionEnd
+
+Function LeaveCheckReqs1
+
+ !ifdef HACKED_INSTALLOPTIONS
+ !insertmacro MUI_INSTALLOPTIONS_READ $0 "CheckReqs1H.ini" "Settings" "State"
+ StrCmp $0 0 validate ;Next button?
+ StrCmp $0 3 checkbox ;checkbox?
+ Abort ;Return to the page
+
+ checkbox:
+ !insertmacro MUI_INSTALLOPTIONS_READ $0 "CheckReqs1H.ini" "Field 3" "State"
+ GetDlgItem $1 $HWNDPARENT 1
+ EnableWindow $1 $0
+ Abort
+
+ validate:
+ !endif
+
+FunctionEnd
+
+Function FindErlang
+
+ Exch $R0
+ Push $R1
+ Push $R2
+ Push $R3
+ Push $R4
+ Push $R5
+
+ StrCpy $R1 0
+ StrCpy $R2 "SOFTWARE\Ericsson\Erlang"
+
+ loop:
+ StrCmp $R0 HKLM h1
+ EnumRegKey $R3 HKCU $R2 $R1
+ Goto l1
+ h1:
+ EnumRegKey $R3 HKLM $R2 $R1
+ l1:
+ IntOp $R1 $R1 + 1
+ StrCmp $R3 "" endloop
+ ClearErrors
+ StrCmp $R0 HKLM h2
+ ReadRegStr $R4 HKCU "$R2\$R3" ""
+ Goto l2
+ h2:
+ ReadRegStr $R4 HKLM "$R2\$R3" ""
+ l2:
+ IfFileExists "$R4\bin\erl.exe" 0 loop
+ Push $REQUIRED_ERLANG_VERSION
+ Push $R3
+ Call CompareVersions
+ Pop $R5
+ StrCmp $R5 1 get
+ Goto loop
+
+ endloop:
+ StrCpy $R4 ""
+
+ get:
+ StrCpy $R0 $R4
+ StrCpy $R1 $R3
+
+ Pop $R5
+ Pop $R4
+ Pop $R3
+ Pop $R2
+ Exch $R1
+ Exch
+ Exch $R0
+
+FunctionEnd
+
+Function FindOpenSSL
+
+ Exch $R0
+ Push $R1
+ Push $R2
+ Push $R3
+ Push $R4
+ Push $R5
+
+ StrCpy $R1 0
+ StrCpy $R2 "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenSSL_is1"
+
+ StrCmp $R0 HKLM h1
+ ReadRegStr $R3 HKCU "$R2" "DisplayName"
+ ReadRegStr $R4 HKCU "$R2" "Inno Setup: App Path"
+ Goto l1
+ h1:
+ ReadRegStr $R3 HKLM "$R2" "DisplayName"
+ ReadRegStr $R4 HKLM "$R2" "Inno Setup: App Path"
+ l1:
+
+ IfFileExists "$R4\bin\openssl.exe" 0 notfound
+ Goto get
+ ; TODO check version
+ ;Push $REQUIRED_OPENSSL_VERSION
+ ;Push $R3
+ ;Call CompareVersions
+ ;Pop $R5
+ ;StrCmp $R5 1 get
+
+ notfound:
+ StrCpy $R4 ""
+
+ get:
+ StrCpy $R0 $R4
+ StrCpy $R1 $R3
+
+ Pop $R5
+ Pop $R4
+ Pop $R3
+ Pop $R2
+ Exch $R1
+ Exch
+ Exch $R0
+
+FunctionEnd
+
+;----------------------------------------------------------------------
+; CompareVersions
+; input:
+; top of stack = existing version
+; top of stack-1 = needed version
+; output:
+; top of stack = 1 if current version => neded version, else 0
+; version is a string in format "xx.xx.xx.xx" (number of interger sections
+; can be different in needed and existing versions)
+
+Function CompareVersions
+ ; stack: existing ver | needed ver
+ Exch $R0
+ Exch
+ Exch $R1
+ ; stack: $R1|$R0
+
+ Push $R1
+ Push $R0
+ ; stack: e|n|$R1|$R0
+
+ ClearErrors
+ loop:
+ IfErrors VersionNotFound
+ Strcmp $R0 "" VersionTestEnd
+
+ Call ParseVersion
+ Pop $R0
+ Exch
+
+ Call ParseVersion
+ Pop $R1
+ Exch
+
+ IntCmp $R1 $R0 +1 VersionOk VersionNotFound
+ Pop $R0
+ Push $R0
+
+ goto loop
+
+ VersionTestEnd:
+ Pop $R0
+ Pop $R1
+ Push $R1
+ Push $R0
+ StrCmp $R0 $R1 VersionOk VersionNotFound
+
+ VersionNotFound:
+ StrCpy $R0 "0"
+ Goto end
+
+ VersionOk:
+ StrCpy $R0 "1"
+end:
+ ; stack: e|n|$R1|$R0
+ Exch $R0
+ Pop $R0
+ Exch $R0
+ ; stack: res|$R1|$R0
+ Exch
+ ; stack: $R1|res|$R0
+ Pop $R1
+ ; stack: res|$R0
+ Exch
+ Pop $R0
+ ; stack: res
+FunctionEnd
+
+;-----------------------------------------------------------------------
+; ParseVersion
+; input:
+; top of stack = version string ("xx.xx.xx.xx")
+; output:
+; top of stack = first number in version ("xx")
+; top of stack-1 = rest of the version string ("xx.xx.xx")
+Function ParseVersion
+ Exch $R1 ; version
+ Push $R2
+ Push $R3
+
+ StrCpy $R2 1
+ loop:
+ StrCpy $R3 $R1 1 $R2
+ StrCmp $R3 "." loopend
+ StrLen $R3 $R1
+ IntCmp $R3 $R2 loopend loopend
+ IntOp $R2 $R2 + 1
+ Goto loop
+ loopend:
+ Push $R1
+ StrCpy $R1 $R1 $R2
+ Exch $R1
+
+ StrLen $R3 $R1
+ IntOp $R3 $R3 - $R2
+ IntOp $R2 $R2 + 1
+ StrCpy $R1 $R1 $R3 $R2
+
+ Push $R1
+
+ Exch 2
+ Pop $R3
+
+ Exch 2
+ Pop $R2
+
+ Exch 2
+ Pop $R1
+FunctionEnd
+
+Function FindFiles
+
+ Exch $R5 # callback function
+ Exch
+ Exch $R4 # file name
+ Exch 2
+ Exch $R0 # directory
+ Push $R1
+ Push $R2
+ Push $R3
+ Push $R6
+
+ Push $R0 # first dir to search
+
+ StrCpy $R3 1
+
+ nextDir:
+ Pop $R0
+ IntOp $R3 $R3 - 1
+ ClearErrors
+ FindFirst $R1 $R2 "$R0\*.*"
+ nextFile:
+ StrCmp $R2 "." gotoNextFile
+ StrCmp $R2 ".." gotoNextFile
+
+ StrCmp $R2 $R4 0 isDir
+ Push "$R0\$R2"
+ Call $R5
+ Pop $R6
+ StrCmp $R6 "stop" 0 isDir
+ loop:
+ StrCmp $R3 0 done
+ Pop $R0
+ IntOp $R3 $R3 - 1
+ Goto loop
+
+ isDir:
+ IfFileExists "$R0\$R2\*.*" 0 gotoNextFile
+ IntOp $R3 $R3 + 1
+ Push "$R0\$R2"
+
+ gotoNextFile:
+ FindNext $R1 $R2
+ IfErrors 0 nextFile
+
+ done:
+ FindClose $R1
+ StrCmp $R3 0 0 nextDir
+
+ Pop $R6
+ Pop $R3
+ Pop $R2
+ Pop $R1
+ Pop $R0
+ Pop $R5
+ Pop $R4
+
+FunctionEnd
+
diff --git a/win32/ejabberd_header.bmp b/win32/ejabberd_header.bmp
new file mode 100644
index 000000000..14d70ddee
--- /dev/null
+++ b/win32/ejabberd_header.bmp
Binary files differ
diff --git a/win32/ejabberd_intro.bmp b/win32/ejabberd_intro.bmp
new file mode 100644
index 000000000..7b37b0780
--- /dev/null
+++ b/win32/ejabberd_intro.bmp
Binary files differ
diff --git a/win32/inetrc b/win32/inetrc
new file mode 100644
index 000000000..49b18c2eb
--- /dev/null
+++ b/win32/inetrc
@@ -0,0 +1 @@
+{registry, win32}.