From d55f1c04eedf88198c4f91b5378439d3d830c759 Mon Sep 17 00:00:00 2001 From: 0xboobface <0xboobface@gmail.com> Date: Tue, 9 Jun 2020 19:32:15 +0200 Subject: [PATCH] Fix MFC websocket communication The protocol had been changed for the initial login sequence --- .../java/ctbrec/sites/mfc/MyFreeCams.java | 3 +- .../ctbrec/sites/mfc/MyFreeCamsClient.java | 38 +++++++++---------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/common/src/main/java/ctbrec/sites/mfc/MyFreeCams.java b/common/src/main/java/ctbrec/sites/mfc/MyFreeCams.java index 9c9c5288..8346a1f6 100644 --- a/common/src/main/java/ctbrec/sites/mfc/MyFreeCams.java +++ b/common/src/main/java/ctbrec/sites/mfc/MyFreeCams.java @@ -139,7 +139,8 @@ public class MyFreeCams extends AbstractSite { public Model createModelFromUrl(String url) { String[] patterns = new String[] { "https?://profiles.myfreecams.com/([^/]*?)", - "https?://(?:www.)?myfreecams.com/#(.*)" + "https?://(?:www.)?myfreecams.com/#(.*)", + "https?://m.myfreecams.com/models/(.*)" }; for (String pattern : patterns) { Matcher m = Pattern.compile(pattern).matcher(url); diff --git a/common/src/main/java/ctbrec/sites/mfc/MyFreeCamsClient.java b/common/src/main/java/ctbrec/sites/mfc/MyFreeCamsClient.java index cc6cc549..b78816fa 100644 --- a/common/src/main/java/ctbrec/sites/mfc/MyFreeCamsClient.java +++ b/common/src/main/java/ctbrec/sites/mfc/MyFreeCamsClient.java @@ -68,7 +68,6 @@ public class MyFreeCamsClient { private Integer cxid; private int[] ctx; private String ctxenc; - private String chatToken; private int sessionId; private long heartBeat; private volatile boolean connecting = false; @@ -160,10 +159,8 @@ public class MyFreeCamsClient { sessionStates.invalidateAll(); models.invalidateAll(); LOG.trace("open: [{}]", response.body().string()); - webSocket.send("hello fcserver\n"); webSocket.send("fcsws_20180422\n"); - webSocket.send( - "1 0 0 81 0 %7B%22err%22%3A0%2C%22start%22%3A0%2C%22stop%22%3A0%2C%22a%22%3A0%2C%22time%22%3A0%2C%22key%22%3A%22%22%2C%22cid%22%3A%22%22%2C%22pid%22%3A1%2C%22site%22%3A%22www%22%7D\n"); + login(webSocket); heartBeat = System.currentTimeMillis(); startKeepAlive(webSocket); } catch (IOException e) { @@ -232,7 +229,7 @@ public class MyFreeCamsClient { case JOINCHAN: case SESSIONSTATE: if (!message.getMessage().isEmpty()) { - // LOG.debug("SessionState: {}", message.getMessage()); + //LOG.debug("SessionState: {}", message.getMessage()); JsonAdapter adapter = moshi.adapter(SessionState.class); try { SessionState sessionState = adapter.fromJson(message.getMessage()); @@ -268,20 +265,7 @@ public class MyFreeCamsClient { break; case EXTDATA: if (message.getArg1() == MessageTypes.LOGIN) { - chatToken = message.getMessage(); - String username = Config.getInstance().getSettings().mfcUsername; - if (StringUtil.isNotBlank(username)) { - boolean login = mfc.getHttpClient().login(); - if (login) { - Cookie passcode = mfc.getHttpClient().getCookie("passcode"); - webSocket.send("1 0 0 20071025 0 " + chatToken + "@1/" + username + ":" + passcode.value() + "\n"); - } else { - LOG.error("Login failed"); - webSocket.send("1 0 0 20080909 0 guest:guest\n"); - } - } else { - webSocket.send("1 0 0 20080909 0 guest:guest\n"); - } + } else if (message.getArg1() == MessageTypes.MANAGELIST) { requestExtData(message.getMessage()); } else { @@ -321,6 +305,22 @@ public class MyFreeCamsClient { } } + private void login(WebSocket webSocket) throws IOException { + String username = Config.getInstance().getSettings().mfcUsername; + if (StringUtil.isNotBlank(username)) { + boolean login = mfc.getHttpClient().login(); + if (login) { + Cookie passcode = mfc.getHttpClient().getCookie("passcode"); + webSocket.send("1 0 0 20071025 0 1/" + username + ":" + passcode.value() + "\n"); + } else { + LOG.error("Login failed. Logging in as guest"); + webSocket.send("1 0 0 20071025 0 1/guest:guest\n"); + } + } else { + webSocket.send("1 0 0 20071025 0 1/guest:guest\n"); + } + } + private void requestExtData(String message) { try { JSONObject json = new JSONObject(message);