Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
M
Mirai
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
Mirai
Commits
fa6a9b66
Commit
fa6a9b66
authored
Sep 08, 2019
by
Him188moe
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Updated message&contact adding
parent
b33e8757
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
241 additions
and
23 deletions
+241
-23
mirai-core/src/main/java/net/mamoe/mirai/network/RobotNetworkHandler.kt
.../main/java/net/mamoe/mirai/network/RobotNetworkHandler.kt
+75
-5
mirai-core/src/main/java/net/mamoe/mirai/network/packet/ClientPacket.kt
.../main/java/net/mamoe/mirai/network/packet/ClientPacket.kt
+0
-1
mirai-core/src/main/java/net/mamoe/mirai/network/packet/GradeInfo.kt
...src/main/java/net/mamoe/mirai/network/packet/GradeInfo.kt
+0
-4
mirai-core/src/main/java/net/mamoe/mirai/network/packet/Heartbeat.kt
...src/main/java/net/mamoe/mirai/network/packet/Heartbeat.kt
+0
-4
mirai-core/src/main/java/net/mamoe/mirai/network/packet/SKey.kt
...core/src/main/java/net/mamoe/mirai/network/packet/SKey.kt
+0
-4
mirai-core/src/main/java/net/mamoe/mirai/network/packet/ServerPacket.kt
.../main/java/net/mamoe/mirai/network/packet/ServerPacket.kt
+12
-2
mirai-core/src/main/java/net/mamoe/mirai/network/packet/action/AddContact.kt
.../java/net/mamoe/mirai/network/packet/action/AddContact.kt
+133
-0
mirai-core/src/main/java/net/mamoe/mirai/network/packet/action/AddFriendResult.kt
.../net/mamoe/mirai/network/packet/action/AddFriendResult.kt
+21
-0
mirai-core/src/main/java/net/mamoe/mirai/network/packet/login/ClientChangeOnlineStatusPacket.kt
...ai/network/packet/login/ClientChangeOnlineStatusPacket.kt
+0
-3
No files found.
mirai-core/src/main/java/net/mamoe/mirai/network/RobotNetworkHandler.kt
View file @
fa6a9b66
...
@@ -17,9 +17,7 @@ import net.mamoe.mirai.message.Message
...
@@ -17,9 +17,7 @@ import net.mamoe.mirai.message.Message
import
net.mamoe.mirai.message.defaults.MessageChain
import
net.mamoe.mirai.message.defaults.MessageChain
import
net.mamoe.mirai.network.RobotNetworkHandler.*
import
net.mamoe.mirai.network.RobotNetworkHandler.*
import
net.mamoe.mirai.network.packet.*
import
net.mamoe.mirai.network.packet.*
import
net.mamoe.mirai.network.packet.action.ClientSendFriendMessagePacket
import
net.mamoe.mirai.network.packet.action.*
import
net.mamoe.mirai.network.packet.action.ServerSendFriendMessageResponsePacket
import
net.mamoe.mirai.network.packet.action.ServerSendGroupMessageResponsePacket
import
net.mamoe.mirai.network.packet.login.*
import
net.mamoe.mirai.network.packet.login.*
import
net.mamoe.mirai.task.MiraiThreadPool
import
net.mamoe.mirai.task.MiraiThreadPool
import
net.mamoe.mirai.utils.*
import
net.mamoe.mirai.utils.*
...
@@ -31,6 +29,7 @@ import java.util.*
...
@@ -31,6 +29,7 @@ import java.util.*
import
java.util.concurrent.CompletableFuture
import
java.util.concurrent.CompletableFuture
import
java.util.concurrent.ScheduledFuture
import
java.util.concurrent.ScheduledFuture
import
java.util.concurrent.TimeUnit
import
java.util.concurrent.TimeUnit
import
java.util.function.Supplier
import
javax.imageio.ImageIO
import
javax.imageio.ImageIO
import
kotlin.reflect.KClass
import
kotlin.reflect.KClass
...
@@ -545,16 +544,87 @@ class RobotNetworkHandler(private val robot: Robot) : Closeable {
...
@@ -545,16 +544,87 @@ class RobotNetworkHandler(private val robot: Robot) : Closeable {
}
}
internal
var
gtk
:
Int
=
0
internal
var
gtk
:
Int
=
0
override
fun
onPacketReceived
(
packet
:
ServerPacket
)
{
private
val
addFriendSessions
=
Collections
.
synchronizedCollection
(
mutableListOf
<
AddFriendSession
>())
override
fun
onPacketReceived
(
packet
:
ServerPacket
)
{
when
(
packet
)
{
is
ServerCanAddFriendResponsePacket
->
{
this
.
addFriendSessions
.
forEach
{
it
.
onPacketReceived
(
packet
)
}
}
else
->
{
}
}
}
}
fun
addFriend
(
qqNumber
:
Long
):
Unit
{
fun
addFriend
(
qqNumber
:
Long
,
message
:
Supplier
<
String
>)
{
addFriend
(
qqNumber
,
lazy
{
message
.
get
()
})
}
@JvmSynthetic
fun
addFriend
(
qqNumber
:
Long
,
message
:
Lazy
<
String
>
=
lazyOf
(
""
)):
CompletableFuture
<
AddFriendResult
>
{
val
future
=
CompletableFuture
<
AddFriendResult
>()
val
session
=
AddFriendSession
(
qqNumber
,
future
,
message
)
addFriendSessions
.
add
(
session
)
session
.
sendAddRequest
();
return
future
}
}
override
fun
close
()
{
override
fun
close
()
{
}
}
private
inner
class
AddFriendSession
(
private
val
qq
:
Long
,
private
val
future
:
CompletableFuture
<
AddFriendResult
>,
private
val
message
:
Lazy
<
String
>
)
:
Closeable
{
lateinit
var
id
:
ByteArray
fun
onPacketReceived
(
packet
:
ServerPacket
)
{
if
(!
::
id
.
isInitialized
)
{
return
}
when
(
packet
)
{
is
ServerCanAddFriendResponsePacket
->
{
if
(!(
packet
.
idByteArray
[
2
]
==
id
[
0
]
&&
packet
.
idByteArray
[
3
]
==
id
[
1
]))
{
return
}
when
(
packet
.
state
)
{
ServerCanAddFriendResponsePacket
.
State
.
FAILED
->
{
future
.
complete
(
AddFriendResult
.
FAILED
)
close
()
}
ServerCanAddFriendResponsePacket
.
State
.
ALREADY_ADDED
->
{
future
.
complete
(
AddFriendResult
.
ALREADY_ADDED
)
close
()
}
ServerCanAddFriendResponsePacket
.
State
.
REQUIRE_VERIFICATION
->
{
sendPacket
(
ClientAddFriendPacket
(
robot
.
account
.
qqNumber
,
qq
,
sessionKey
))
}
ServerCanAddFriendResponsePacket
.
State
.
NOT_REQUIRE_VERIFICATION
->
{
}
}
}
}
}
fun
sendAddRequest
()
{
sendPacket
(
ClientCanAddFriendPacket
(
robot
.
account
.
qqNumber
,
qq
,
sessionKey
).
also
{
this
.
id
=
it
.
packetIdLast
})
}
override
fun
close
()
{
addFriendSessions
.
remove
(
this
)
}
}
}
}
}
}
\ No newline at end of file
mirai-core/src/main/java/net/mamoe/mirai/network/packet/ClientPacket.kt
View file @
fa6a9b66
...
@@ -30,7 +30,6 @@ abstract class ClientPacket : ByteArrayDataOutputStream(), Packet {
...
@@ -30,7 +30,6 @@ abstract class ClientPacket : ByteArrayDataOutputStream(), Packet {
}
catch
(
e
:
IOException
)
{
}
catch
(
e
:
IOException
)
{
throw
RuntimeException
(
e
)
throw
RuntimeException
(
e
)
}
}
}
}
@Throws
(
IOException
::
class
)
@Throws
(
IOException
::
class
)
...
...
mirai-core/src/main/java/net/mamoe/mirai/network/packet/GradeInfo.kt
View file @
fa6a9b66
...
@@ -26,10 +26,6 @@ class ClientAccountInfoRequestPacket(
...
@@ -26,10 +26,6 @@ class ClientAccountInfoRequestPacket(
it
.
writeByte
(
0
x00
)
it
.
writeByte
(
0
x00
)
}
}
}
}
override
fun
getFixedId
():
String
{
return
this
.
idHex
+
" ?? ??"
}
}
}
@PacketId
(
"00 5C"
)
@PacketId
(
"00 5C"
)
...
...
mirai-core/src/main/java/net/mamoe/mirai/network/packet/Heartbeat.kt
View file @
fa6a9b66
...
@@ -22,10 +22,6 @@ class ClientHeartbeatPacket(
...
@@ -22,10 +22,6 @@ class ClientHeartbeatPacket(
it
.
writeHex
(
"00 01 00 01"
)
it
.
writeHex
(
"00 01 00 01"
)
}
}
}
}
override
fun
getFixedId
():
String
{
return
this
.
idHex
+
" ?? ??"
}
}
}
class
ServerHeartbeatResponsePacket
(
input
:
DataInputStream
)
:
ServerPacket
(
input
)
class
ServerHeartbeatResponsePacket
(
input
:
DataInputStream
)
:
ServerPacket
(
input
)
\ No newline at end of file
mirai-core/src/main/java/net/mamoe/mirai/network/packet/SKey.kt
View file @
fa6a9b66
...
@@ -23,10 +23,6 @@ class ClientSKeyRequestPacket(
...
@@ -23,10 +23,6 @@ class ClientSKeyRequestPacket(
it
.
writeHex
(
"33 00 05 00 08 74 2E 71 71 2E 63 6F 6D 00 0A 71 75 6E 2E 71 71 2E 63 6F 6D 00 0C 71 7A 6F 6E 65 2E 71 71 2E 63 6F 6D 00 0C 6A 75 62 61 6F 2E 71 71 2E 63 6F 6D 00 09 6B 65 2E 71 71 2E 63 6F 6D"
)
it
.
writeHex
(
"33 00 05 00 08 74 2E 71 71 2E 63 6F 6D 00 0A 71 75 6E 2E 71 71 2E 63 6F 6D 00 0C 71 7A 6F 6E 65 2E 71 71 2E 63 6F 6D 00 0C 6A 75 62 61 6F 2E 71 71 2E 63 6F 6D 00 09 6B 65 2E 71 71 2E 63 6F 6D"
)
}
}
}
}
override
fun
getFixedId
():
String
{
return
this
.
idHex
+
" ?? ??"
}
}
}
/**
/**
...
...
mirai-core/src/main/java/net/mamoe/mirai/network/packet/ServerPacket.kt
View file @
fa6a9b66
package
net.mamoe.mirai.network.packet
package
net.mamoe.mirai.network.packet
import
lombok.Getter
import
net.mamoe.mirai.network.packet.PacketNameFormatter.adjustName
import
net.mamoe.mirai.network.packet.PacketNameFormatter.adjustName
import
net.mamoe.mirai.network.packet.action.ServerCanAddFriendResponsePacket
import
net.mamoe.mirai.network.packet.action.ServerSendFriendMessageResponsePacket
import
net.mamoe.mirai.network.packet.action.ServerSendFriendMessageResponsePacket
import
net.mamoe.mirai.network.packet.action.ServerSendGroupMessageResponsePacket
import
net.mamoe.mirai.network.packet.action.ServerSendGroupMessageResponsePacket
import
net.mamoe.mirai.network.packet.login.*
import
net.mamoe.mirai.network.packet.login.*
...
@@ -12,9 +12,11 @@ import java.io.DataInputStream
...
@@ -12,9 +12,11 @@ import java.io.DataInputStream
* @author Him188moe
* @author Him188moe
*/
*/
abstract
class
ServerPacket
(
val
input
:
DataInputStream
)
:
Packet
{
abstract
class
ServerPacket
(
val
input
:
DataInputStream
)
:
Packet
{
@Getter
var
idHex
:
String
var
idHex
:
String
var
idByteArray
:
ByteArray
//fixed 4 size
var
encoded
:
Boolean
=
false
var
encoded
:
Boolean
=
false
init
{
init
{
...
@@ -24,6 +26,12 @@ abstract class ServerPacket(val input: DataInputStream) : Packet {
...
@@ -24,6 +26,12 @@ abstract class ServerPacket(val input: DataInputStream) : Packet {
}
catch
(
e
:
NullPointerException
)
{
}
catch
(
e
:
NullPointerException
)
{
""
""
}
}
idByteArray
=
if
(
idHex
.
isEmpty
())
{
byteArrayOf
(
0
,
0
,
0
,
0
)
}
else
{
idHex
.
hexToBytes
()
}
}
}
fun
<
P
:
ServerPacket
>
P
.
setId
(
idHex
:
String
):
P
{
fun
<
P
:
ServerPacket
>
P
.
setId
(
idHex
:
String
):
P
{
...
@@ -101,6 +109,8 @@ abstract class ServerPacket(val input: DataInputStream) : Packet {
...
@@ -101,6 +109,8 @@ abstract class ServerPacket(val input: DataInputStream) : Packet {
"00 CD"
->
ServerSendFriendMessageResponsePacket
(
stream
)
"00 CD"
->
ServerSendFriendMessageResponsePacket
(
stream
)
"00 02"
->
ServerSendGroupMessageResponsePacket
(
stream
)
"00 02"
->
ServerSendGroupMessageResponsePacket
(
stream
)
"00 A7"
->
ServerCanAddFriendResponsePacket
(
stream
)
else
->
throw
IllegalArgumentException
(
idHex
)
else
->
throw
IllegalArgumentException
(
idHex
)
}
}
}.
apply
{
this
.
idHex
=
idHex
}
}.
apply
{
this
.
idHex
=
idHex
}
...
...
mirai-core/src/main/java/net/mamoe/mirai/network/packet/action/AddContact.kt
0 → 100644
View file @
fa6a9b66
package
net.mamoe.mirai.network.packet.action
import
net.mamoe.mirai.network.Protocol
import
net.mamoe.mirai.network.packet.*
import
net.mamoe.mirai.utils.getRandomByteArray
import
net.mamoe.mirai.utils.toUHexString
import
java.io.DataInputStream
import
java.util.*
/**
* 向服务器检查是否可添加某人为好友
*
* @author Him188moe
*/
@PacketId
(
"00 A7"
)
@ExperimentalUnsignedTypes
class
ClientCanAddFriendPacket
(
val
robot
:
Long
,
val
qq
:
Long
,
val
sessionKey
:
ByteArray
)
:
ClientPacket
()
{
val
packetIdLast
=
getRandomByteArray
(
2
)
override
fun
getFixedId
():
String
{
return
idHex
+
" "
+
packetIdLast
.
toUHexString
()
}
override
fun
encode
()
{
this
.
write
(
packetIdLast
)
//id, 2bytes
this
.
writeQQ
(
robot
)
this
.
writeHex
(
Protocol
.
fixVer2
)
this
.
encryptAndWrite
(
sessionKey
)
{
it
.
writeQQ
(
qq
)
}
}
}
@PacketId
(
"00 A7"
)
class
ServerCanAddFriendResponsePacket
(
input
:
DataInputStream
)
:
ServerPacket
(
input
)
{
lateinit
var
state
:
State
enum
class
State
{
ALREADY_ADDED
,
REQUIRE_VERIFICATION
,
NOT_REQUIRE_VERIFICATION
,
FAILED
,
}
@ExperimentalUnsignedTypes
override
fun
decode
()
{
val
data
=
input
.
goto
(
0
).
readAllBytes
()
if
(
data
.
size
==
99
)
{
state
=
State
.
ALREADY_ADDED
return
}
state
=
when
(
data
[
data
.
size
-
1
].
toUInt
())
{
0
u
->
State
.
NOT_REQUIRE_VERIFICATION
1
u
->
State
.
REQUIRE_VERIFICATION
99
u
->
State
.
ALREADY_ADDED
3
u
,
4
u
->
State
.
FAILED
else
->
throw
IllegalArgumentException
(
Arrays
.
toString
(
data
))
}
}
@PacketId
(
"00 A7"
)
class
Encrypted
(
inputStream
:
DataInputStream
)
:
ServerPacket
(
inputStream
)
{
fun
decrypt
(
sessionKey
:
ByteArray
):
ServerCanAddFriendResponsePacket
{
return
ServerCanAddFriendResponsePacket
(
this
.
decryptBy
(
sessionKey
)).
setId
(
this
.
idHex
)
}
}
}
/**
* 请求添加好友
*/
@PacketId
(
"00 AE"
)
@ExperimentalUnsignedTypes
class
ClientAddFriendPacket
(
val
robot
:
Long
,
val
qq
:
Long
,
val
sessionKey
:
ByteArray
)
:
ClientPacket
()
{
val
packetIdLast
=
getRandomByteArray
(
2
)
override
fun
getFixedId
():
String
{
return
idHex
+
" "
+
packetIdLast
.
toUHexString
()
}
override
fun
encode
()
{
this
.
write
(
packetIdLast
)
//id, 2bytes
this
.
writeQQ
(
robot
)
this
.
writeHex
(
Protocol
.
fixVer2
)
this
.
encryptAndWrite
(
sessionKey
)
{
it
.
writeHex
(
"01 00 01"
)
it
.
writeQQ
(
qq
)
}
}
}
class
ServerAddFriendResponsePacket
(
input
:
DataInputStream
)
:
ServerAddContactResponsePacket
(
input
)
class
ServerAddGroupResponsePacket
(
input
:
DataInputStream
)
:
ServerAddContactResponsePacket
(
input
)
/**
* 添加好友/群的回复
*/
open
class
ServerAddContactResponsePacket
(
input
:
DataInputStream
)
:
ServerPacket
(
input
)
{
class
Raw
(
input
:
DataInputStream
)
:
ServerPacket
(
input
)
{
override
fun
decode
()
{
}
fun
distribute
():
ServerAddContactResponsePacket
{
TODO
()
}
class
Encrypted
(
input
:
DataInputStream
)
:
ServerPacket
(
input
)
{
fun
decrypt
(
sessionKey
:
ByteArray
):
Raw
=
Raw
(
this
.
decryptBy
(
sessionKey
))
}
}
}
\ No newline at end of file
mirai-core/src/main/java/net/mamoe/mirai/network/packet/action/AddFriendResult.kt
0 → 100644
View file @
fa6a9b66
package
net.mamoe.mirai.network.packet.action
/**
* 添加好友结果
*/
enum
class
AddFriendResult
{
/**
* 等待对方处理
*/
WAITING_FOR_AGREEMENT
,
/**
* 和对方已经是好友了
*/
ALREADY_ADDED
,
/**
* 对方设置为不添加好友等
*/
FAILED
,
}
\ No newline at end of file
mirai-core/src/main/java/net/mamoe/mirai/network/packet/login/ClientChangeOnlineStatusPacket.kt
View file @
fa6a9b66
...
@@ -17,9 +17,6 @@ class ClientChangeOnlineStatusPacket(
...
@@ -17,9 +17,6 @@ class ClientChangeOnlineStatusPacket(
private
val
loginStatus
:
ClientLoginStatus
private
val
loginStatus
:
ClientLoginStatus
)
:
ClientPacket
()
{
)
:
ClientPacket
()
{
override
fun
getFixedId
():
String
{
return
this
.
idHex
+
" ?? ??"
;
}
override
fun
encode
()
{
override
fun
encode
()
{
this
.
writeRandom
(
2
)
//part of packet id
this
.
writeRandom
(
2
)
//part of packet id
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment