找回密码
 立即注册
  • 便民服务
  • 关注我们
  • 社区新手

[经验共享] 诺基亚等老手机自带聊天室服务器搭建教程(IMPS Wireless Village)

[复制链接]

马上注册,享用更多功能,让你轻松玩转DOSPY论坛-诺亚方舟号

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 8192Bit 于 2025-3-2 22:40 编辑


前排提示:建议使用论坛电脑版阅读本帖。



大家在研究诺基亚等老手机时可能会发现这个功能:

PIC_1.jpg
但是打开后发现需要设置服务器才能使用。本帖分享搭建这种聊天室服务器的过程。


1. 关于聊天室使用的协议

我们连接WiFi后把聊天室服务器设置为内网某地址,通过抓包软件可以看到数据包的具体格式。
PIC_2.png
其中"wireless-village"字样吸引了我们的注意。以这个关键词在网上查找资料,可以在某百科上查到这是OMA制定的一种即时通信协议。
进一步查找,可以搜索到外国通信论坛Osmocom的一篇帖子Wireless Village/OMA IMPS/baraza.im experiments



2. 服务器在Debian 11上的编译

帖子中提到了开源服务器baraza支持上述协议,但是疑似有些太老了。楼主提供了自己修改的版本,使得源代码可以在Debian 11上编译。
在Debian 11上clone转存到GitHub的源代码并切换到manawyrm-compile-debian11分支。

  1. git clone https://github.com/blamba-de/baraza.git
  2. git checkout manawyrm-compile-debian11
  3. git pull origin manawyrm-compile-debian11
复制代码
按照帖子中的命令安装好依赖。
  1. apt install postgresql kannel kannel-dev kannel-extras autoconf build-essential libc6-dev libresolv* libgnutls* libgcrypt-dev libiksemel*
  2. systemctl disable --now kannel
复制代码
然后运行经典
  1. sudo configure&&make&&make install
复制代码
注意某些情况下需要自行指定glibc中libresolv.a静态库的位置。我的系统上libresolv.a位于/lib/x86_64-linux-gnu/,所以使用命令
  1. sudo ./configure --with-libresolv-dir=/lib/x86_64-linux-gnu/
复制代码
make时如果出现multiple definition of xxx,可以试着用automake等工具重新生成configure。

3. 数据库配置

我和原帖楼主在软件初次启动初始化SQL表的时候都失败了,以下为手动初始化的方法。
baraza所用的PostgreSQL安装后会创建postgres用户,拥有数据库最高权限。我们用
  1. sudo -i -u postgres
复制代码
切换到该用户,按照帖子中的命令创建database并授予新建用户权限。在本教程中,我们假设数据库名称为imps,用户名为barazad,密码为12345,则:
  1. postgres=# CREATE DATABASE imps;
  2. postgres=# CREATE USER barazad WITH ENCRYPTED PASSWORD '12345';
  3. postgres=# GRANT ALL PRIVILEGES ON DATABASE imps TO barazad;
复制代码
如果你打算使用自动注册功能(配置文件中auto-registration需要为yes),还需要在数据表localdomains里面加入默认域名。在postgres用户下执行:
  1. psql -d imps
复制代码


4. 服务器配置

配置文件默认从/etc/imps.conf加载,也可以用以下命令指定:
  1. barazad -c 配置文件位置
复制代码
配置文件中各项参数具体作用位于某网页时光机保存的baraza官网上,此处不多赘述。


5. 手机配置

PIC_3.png
服务器名称随意,接入点需要选择正确。
网址即服务器地址,端口号是配置文件中的http-port。例:http://192.168.1.123:8181
“用户识别码”和“密码”即账号密码。开启了自动注册的话,如果账号不存在,就会按提供的账号密码创建新账户。
另外,假如上文在localdomains中所设置的域名为example.com,则创建账号时使用"user@example.com"与"user"的结果是一样的。


6.



PIC_4.jpg


7. 开服之后......

除了最基本的文本聊天服务外,baraza还可以提供这些功能:
  • 基于TCP、UDP和WAP Push SMS的主动消息推送
  • 图片等文件的发送
  • 与XMPP服务器连接,或是在多个Wireless Village服务器之间传输信息

不过
  • 但是原帖楼主关闭了发送WAP Push短信的WAP网关Kannel,而某些设备不支持TCP,UDP无法绕过NAT。大家有兴趣的话可以试着恢复WAP短信推送功能。
  • 我测试图片发送时,另一方可以获知有文件发送过来,但是显示格式不支持。可能和配置文件中以cir-开头的设置项相关。
  • baraza本来支持与XMPP/Jabber服务器连接并互通消息,但是其SSL/TLS版本过于老旧(SSLv3/TLSv1.0),所以原帖楼主注释了向XMPP服务器发送消息的代码。大家可以试着自建XMPP服务器,并允许不安全的连接。这样可以在不支持Wireless Village的设备上使用各种各样的XMPP客户端与baraza用户交流。Wireless Village要求服务器支持SSP协议,让不同服务器的消息可以相互传送,如果有兴趣也可以尝试配置。



此外,还有第三方的Wireless Village客户端Gaim(Windows)和SmartVas(Java ME),在原帖的最后有提及。但是我都没有测试成功。
在此提供修复一条SmartVas的思路:
  • 首先修改主页面(Client.class)的逻辑,使得地址输入框输入的地址可以来自任意host或端口。(本来的逻辑是在前面加上一个内置host和80端口号,这样没法连接其他服务器)
  • 然后用ProGuard对jar文件进行混淆优化压缩,使得手机可以识别到MIDlet类。(可以试试看直接运行源文件,会提示找不到主MIDlet类)



感谢大家的阅读。


评分

参与人数 1方舟币 +35 收起 理由
UNFORGIVEN + 35 赞一个!

查看全部评分

分享至 : QQ空间
收藏
回复 使用道具 举报
CDirectScreenAccess::NewL( iEikonEnv->WsSession(), *iEikonEnv->ScreenDevice(), Window(), *this);

5 个回复

倒序浏览
8192Bit 来自手机 团长 昨天 13:19
沙发

注意:

本帖最后由 8192Bit 于 2025-3-3 13:22 编辑

论坛吞代码,进入psql后,向localdomains加入数据的SQL语句应为:
INSERT INTO localdomains (domain) VALUES ('你的域名');
barazad用户没有权限的话请自行GRANT。
回复 使用道具 举报
看不懂。应该怎么操作才能进入聊天室正常聊天?
回复 使用道具 举报
SD卡两色人 发表于 2025-3-3 21:27
看不懂。应该怎么操作才能进入聊天室正常聊天?

要按照本帖的步骤自己搭建服务器
CDirectScreenAccess::NewL( iEikonEnv->WsSession(), *iEikonEnv->ScreenDevice(), Window(), *this);
回复 使用道具 举报
8192Bit 发表于 2025-3-3 22:11
要按照本帖的步骤自己搭建服务器

只适用于Linux系统吗?
回复 使用道具 举报
SD卡两色人 发表于 2025-3-3 22:17
只适用于Linux系统吗?


虚拟机可以,理论上WSL2什么的应该也可以
CDirectScreenAccess::NewL( iEikonEnv->WsSession(), *iEikonEnv->ScreenDevice(), Window(), *this);
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册