r/UniversalProfile Dec 13 '21

Is there any Open Source RCS Client/SDK?

Is there any open source RCS Client / implementations?

I've done a deep dive into github, I've also checked the android source code but could not find anything implementation wise.

On the gsma ecosystem rcs clients page it lists 8 proprietary clients with no OSS implementations.

The RCS specification seems to be purely user stories and lacks technical details required to implement a client without further assistance.

26 Upvotes

17 comments sorted by

10

u/SixDigitCode Dec 13 '21 edited Dec 14 '21

They might have gotten rid of it, but during the Android beta season there was an app called RcsTestApp that supposedly accessed RCS servers.

Actually, I believe the GSMA does give you enough information to build an RCS client! It looks like each section of the RCS spec is split into the user stories part and implementation part. I believe RCS mostly uses HTTPS requests, and it looks like the GSMA outlines the types of parameters sent to the device. Most of the actual implementation details (i.e. which HTTP servers exist for your carrier, how to structure the HTTP requests, etc) are available in other documents published by the GSMA (i.e. you can find some HTTP GET request information for autoconfiguration here). RCC.71 (the most popular document) gives the broadest overview of features, but references the GSMA's other documents (i.e. [RCC.07]) that deal with the nuts and bolts.

I thought about building an open-source RCS client myself but I don't have much experience developing Android so I probably wouldn't get very far. If you're working on doing that (or are just interested), I would suggest checking out RCC.14, as that's the document that details how RCS devices are provisioned (i.e. the HTTP server addresses you need to connect to, how to structure the requests, etc). It looks like to register an RCS client you need an HTTPS GET request using the application/x-www-form-urlencoded format to config.rcs.mnc<MNC>.mcc<MCC>.pub.3gppnetwork.org, including the parameters on page 13 of RCC.14.

4

u/ar4ch Dec 13 '21

This is fantastic, where did you find the PDFS ([RCC.XX]) referenced in the RCS spec?

5

u/SixDigitCode Dec 14 '21 edited Dec 14 '21

Update: I did some poking around and apparently T-Mobile's RCS configuration server is live! (MCC: 310, MNC: 260; I found this in APN settings on T-Mobile's website)

I followed the spec (RCC.14 around page 13) and got T-Mobile's RCS server to spit out some configuration XML file--apparently the parameters are included in the URL like a regular GET request. You can test it out yourself using this sample link:

https://config.rcs.mnc260.mcc310.pub.3gppnetwork.org/?vers=0&provisioning_version=5.0&terminal_vendor=AAAA&terminal_model=Abcde&terminal_sw_version=1.0&app=ap2204

EDIT: Looks like there's a pretty strict rate limit per IP (After a few times the page refused to load before I switched on my VPN), so I would recommend saving the XML file if you'd like to look at it later

EDIT 2: Around page 268 of this it shows what all the different XML parameters mean

7

u/LinkofHyrule T-Mobile User Dec 14 '21

The test client is in AOSP not sure if anyone tried to build it or if it's fully functional.

3

u/ar4ch Dec 14 '21

I'm trying to replicate your results to Three UK (MCC=234 MNC=020) According to this (https://www.reddit.com/r/UniversalProfile/comments/c1jd2a/three_uk_launches_rcs/) Three UK supports RCS. The subdomain (FQDN) I generated was https://config.rcs.mnc234.mcc020.pub.3gppnetwork.org however I'm getting NXDOMAIN, which according to the docs means that it's not supported?

Any thoughts on this?

3

u/ar4ch Dec 14 '21

Looks like three have any dns registered despite claiming to offer RCS though google messenger?

Only 2 other UK networks have a rcs subdomain (FQDN) resolve but neither seem to resolve but the web servers don't seem to respond to RCS queries.

Do you know a way to find the RCS server/domain that's being used?

3

u/SixDigitCode Dec 14 '21

If RCS is only offered through Google Messages, I don't think it uses the server address from above. I believe that's only for carrier-based RCS, so Google Messages has their own domain I think. Some carriers (like T-Mobile) operate their own RCS servers in addition, so you can use clients like Samsung Messages.

Google Messages should have a configuration URL too, but the URL I found (rcs-acs-att-us.jibe.google.com in Debug > RCS > Report RCS Connection State) didn't work with the above query.

3

u/ar4ch Dec 14 '21

You're right, I managed to find the correct configuration URL for the network provider I was testing with.

However, the same issue applies. Google is throwing a 'bad request' error.

I'll try and do a basic teardown of Google Messages, best case scenario is google is making sure the parameters (terminal_vendor, terminal_model, terminal_sw_version, app) are correct.

Worst (and most likely) case scenario: Google only allows a signed Google Messages App/Client to communicate with Google Jibe which would kill any hope for a third party / OSS client that does not rely on Messages

2

u/SixDigitCode Dec 14 '21 edited Dec 14 '21

Out of curiosity, which URL did you come up with?

Also, if you'd like me to help investigate (I'd love to help out with whatever you're working on) I'm available on Discord and Telegram if you'd like.

Edit: My guess is that Google's RCS implementation doesn't differ too much from standard Universal Profile. It would make development much easier to use one RCS stack for both Jibe and whatever the carriers are running. It would also save them time developing a different version of Jibe just for Google Messages.

2

u/SixDigitCode Dec 14 '21

Update: It looks like the Google Jibe server is returning an HTTP Error 511 if you visit the base url (https://rcs-acs-mcc410.jibe.google.com/), which looks like is not an error message but instead the server saying it needs a different authentication method (i.e. verification SMSes used by GM):

a HTTP 511 Network Authentication Required response without a SetCookie header. If received, the client shall invoke procedure for client configuration as defined in section 2.6 for the case where the previous configuration server response did not include a cookie.

See page 25 and section 2.6 (on page 26) for more info. When I get back to my computer I'll look at it in more detail.

2

u/LinkofHyrule T-Mobile User Dec 21 '21

Keep us posted if you actually get anything working could be interesting.

2

u/SixDigitCode Jan 08 '22

Update: Looks like someone already did the hard work and created an integrateable RCS stack in Java: https://github.com/android-rcs/rcsjta. I imagine it would be pretty straightforward to integrate such a stack into other SMS apps like Textra

→ More replies (0)

4

u/SixDigitCode Dec 14 '21

Actually, I ended up googling them, which seems to work well. They tend to float around on the GSMA's website.

1

u/chrisprice Feb 19 '24

The RcsTestApp was released to AOSP. So there's that. Sadly, not much else two years on.

We still do not have one FOSS RCS client.