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) { public Model createModelFromUrl(String url) {
String[] patterns = new String[] { String[] patterns = new String[] {
"https?://profiles.myfreecams.com/([^/]*?)", "https?://profiles.myfreecams.com/([^/]*?)",
"https?://(?:www.)?myfreecams.com/#(.*)" "https?://(?:www.)?myfreecams.com/#(.*)",
"https?://m.myfreecams.com/models/(.*)"
}; };
for (String pattern : patterns) { for (String pattern : patterns) {
Matcher m = Pattern.compile(pattern).matcher(url); Matcher m = Pattern.compile(pattern).matcher(url);

View File

@ -68,7 +68,6 @@ public class MyFreeCamsClient {
private Integer cxid; private Integer cxid;
private int[] ctx; private int[] ctx;
private String ctxenc; private String ctxenc;
private String chatToken;
private int sessionId; private int sessionId;
private long heartBeat; private long heartBeat;
private volatile boolean connecting = false; private volatile boolean connecting = false;
@ -160,10 +159,8 @@ public class MyFreeCamsClient {
sessionStates.invalidateAll(); sessionStates.invalidateAll();
models.invalidateAll(); models.invalidateAll();
LOG.trace("open: [{}]", response.body().string()); LOG.trace("open: [{}]", response.body().string());
webSocket.send("hello fcserver\n");
webSocket.send("fcsws_20180422\n"); webSocket.send("fcsws_20180422\n");
webSocket.send( login(webSocket);
"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");
heartBeat = System.currentTimeMillis(); heartBeat = System.currentTimeMillis();
startKeepAlive(webSocket); startKeepAlive(webSocket);
} catch (IOException e) { } catch (IOException e) {
@ -232,7 +229,7 @@ public class MyFreeCamsClient {
case JOINCHAN: case JOINCHAN:
case SESSIONSTATE: case SESSIONSTATE:
if (!message.getMessage().isEmpty()) { if (!message.getMessage().isEmpty()) {
// LOG.debug("SessionState: {}", message.getMessage()); //LOG.debug("SessionState: {}", message.getMessage());
JsonAdapter<SessionState> adapter = moshi.adapter(SessionState.class); JsonAdapter<SessionState> adapter = moshi.adapter(SessionState.class);
try { try {
SessionState sessionState = adapter.fromJson(message.getMessage()); SessionState sessionState = adapter.fromJson(message.getMessage());
@ -268,20 +265,7 @@ public class MyFreeCamsClient {
break; break;
case EXTDATA: case EXTDATA:
if (message.getArg1() == MessageTypes.LOGIN) { 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) { } else if (message.getArg1() == MessageTypes.MANAGELIST) {
requestExtData(message.getMessage()); requestExtData(message.getMessage());
} else { } 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) { private void requestExtData(String message) {
try { try {
JSONObject json = new JSONObject(message); JSONObject json = new JSONObject(message);