From 357130cda08ae67a6f6d7e63a5405730e5614802 Mon Sep 17 00:00:00 2001 From: Mygod Date: Wed, 30 Nov 2016 16:54:20 +0800 Subject: [PATCH] Refine #989 --- .../scala/com/github/shadowsocks/database/Profile.scala | 4 +++- src/main/scala/com/github/shadowsocks/utils/Parser.scala | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/scala/com/github/shadowsocks/database/Profile.scala b/src/main/scala/com/github/shadowsocks/database/Profile.scala index 585f59f5..38a26061 100644 --- a/src/main/scala/com/github/shadowsocks/database/Profile.scala +++ b/src/main/scala/com/github/shadowsocks/database/Profile.scala @@ -20,6 +20,7 @@ package com.github.shadowsocks.database +import java.net.URLEncoder import java.util.Locale import android.os.Binder @@ -95,7 +96,8 @@ class Profile { var kcpcli: String = "--crypt none --mode normal --mtu 1200 --nocomp --dscp 46 --parityshard 0" override def toString = "ss://" + Base64.encodeToString("%s%s:%s@%s:%d".formatLocal(Locale.ENGLISH, - method, if (auth) "-auth" else "", password, host, remotePort).getBytes, Base64.NO_PADDING | Base64.NO_WRAP) + method, if (auth) "-auth" else "", password, host, remotePort).getBytes, Base64.NO_PADDING | Base64.NO_WRAP) + + '#' + URLEncoder.encode(name, "utf-8") def isMethodUnsafe = "table".equalsIgnoreCase(method) || "rc4".equalsIgnoreCase(method) } diff --git a/src/main/scala/com/github/shadowsocks/utils/Parser.scala b/src/main/scala/com/github/shadowsocks/utils/Parser.scala index 3b63810c..11db7662 100644 --- a/src/main/scala/com/github/shadowsocks/utils/Parser.scala +++ b/src/main/scala/com/github/shadowsocks/utils/Parser.scala @@ -20,12 +20,14 @@ package com.github.shadowsocks.utils +import java.net.URLDecoder + import android.util.{Base64, Log} import com.github.shadowsocks.database.Profile object Parser { val TAG = "ShadowParser" - private val pattern = "(?i)ss://([A-Za-z0-9+-/=_]+)(#.+)?".r + private val pattern = "(?i)ss://([A-Za-z0-9+-/=_]+)(#(.+))?".r private val decodedPattern = "(?i)^((.+?)(-auth)??:(.*)@(.+?):(\\d+?))$".r def findAll(data: CharSequence) = pattern.findAllMatchIn(if (data == null) "" else data).map(m => try @@ -38,7 +40,7 @@ object Parser { profile.name = ss.group(5) profile.host = profile.name profile.remotePort = ss.group(6).toInt - if (m.group(2) != null) profile.name = m.group(2).substring(1) + if (m.group(2) != null) profile.name = URLDecoder.decode(m.group(3), "utf-8") profile case _ => null }