forked from j62/ctbrec
1
0
Fork 0

Fix MFC websocket communication

The protocol had been changed for the initial login sequence
This commit is contained in:
0xboobface 2020-06-09 19:32:15 +02:00
parent 7e4a6393b0
commit d55f1c04ee
2 changed files with 21 additions and 20 deletions

View File

@ -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);

View File

@ -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) {
@ -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);