mirror of
https://github.com/esiur/esiur-js.git
synced 2025-05-06 12:32:58 +00:00
Merge branch 'main' of https://github.com/esiur/esiur-js
This commit is contained in:
commit
6bfe82783d
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "esiur",
|
"name": "esiur",
|
||||||
"version": "2.3.2",
|
"version": "2.3.3",
|
||||||
"description": "Distributed Object Framework",
|
"description": "Distributed Object Framework",
|
||||||
"main": "esiur.js",
|
"main": "esiur.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
@ -97,6 +97,8 @@ import AuthorizationResultsResponse from '../../Security/Membership/Authorizatio
|
|||||||
import IIPAuthPacketIAuthHeader from '../../Net/Packets/IIPAuthPacketIAuthHeader.js';
|
import IIPAuthPacketIAuthHeader from '../../Net/Packets/IIPAuthPacketIAuthHeader.js';
|
||||||
import AuthorizationRequest from '../../Security/Membership/AuthorizationRequest.js';
|
import AuthorizationRequest from '../../Security/Membership/AuthorizationRequest.js';
|
||||||
|
|
||||||
|
import DistributedResourceAttachRequestInfo from './DistributedResourceAttachRequestInfo.js';
|
||||||
|
|
||||||
export default class DistributedConnection extends IStore {
|
export default class DistributedConnection extends IStore {
|
||||||
|
|
||||||
// fields
|
// fields
|
||||||
@ -1486,18 +1488,18 @@ export default class DistributedConnection extends IStore {
|
|||||||
&& this.#session.remoteMethod == AuthenticationMethod.None)
|
&& this.#session.remoteMethod == AuthenticationMethod.None)
|
||||||
{
|
{
|
||||||
// change to Map<byte, object> for compatibility
|
// change to Map<byte, object> for compatibility
|
||||||
let headers = Codec.compose(session.localHeaders, this);
|
let headers = Codec.compose(this.#session.localHeaders, this);
|
||||||
|
|
||||||
this.#sendParams()
|
this.#sendParams()
|
||||||
.addUint8(IIPAuthPacketInitialize.TokenNoAuth)
|
.addUint8(IIPAuthPacketInitialize.TokenNoAuth)
|
||||||
.addDC(headers)
|
.addDC(headers)
|
||||||
.done();
|
.done();
|
||||||
}
|
}
|
||||||
else if (session.localMethod == AuthenticationMethod.None
|
else if (this.#session.localMethod == AuthenticationMethod.None
|
||||||
&& session.remoteMethod == AuthenticationMethod.None)
|
&& this.#session.remoteMethod == AuthenticationMethod.None)
|
||||||
{
|
{
|
||||||
// change to Map<byte, object> for compatibility
|
// change to Map<byte, object> for compatibility
|
||||||
let headers = Codec.compose(session.localHeaders, this);
|
let headers = Codec.compose(this.#session.localHeaders, this);
|
||||||
|
|
||||||
// @REVIEW: MITM Attack can still occure
|
// @REVIEW: MITM Attack can still occure
|
||||||
this.#sendParams()
|
this.#sendParams()
|
||||||
@ -1565,7 +1567,7 @@ export default class DistributedConnection extends IStore {
|
|||||||
|
|
||||||
this.#resourceRequests.values.forEach((x) => {
|
this.#resourceRequests.values.forEach((x) => {
|
||||||
try {
|
try {
|
||||||
x.triggerError(new AsyncException(ErrorType.Management, 0, "Connection closed"));
|
x.reply.triggerError(new AsyncException(ErrorType.Management, 0, "Connection closed"));
|
||||||
} catch (ex) { }
|
} catch (ex) { }
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -2956,13 +2958,19 @@ export default class DistributedConnection extends IStore {
|
|||||||
|
|
||||||
resource = this.#neededResources.item(id);
|
resource = this.#neededResources.item(id);
|
||||||
|
|
||||||
let request = this.#resourceRequests.item(id);
|
let requestInfo = this.#resourceRequests.item(id);
|
||||||
|
|
||||||
if (request != null) {
|
if (requestInfo != null) {
|
||||||
if (resource != null && (requestSequence?.includes(id) ?? false))
|
if (resource != null && (requestSequence?.includes(id) ?? false)){
|
||||||
return new AsyncReply(resource);
|
return new AsyncReply(resource);
|
||||||
else
|
}
|
||||||
return request;
|
else if (resource != null && requestInfo.requestSequence.includes(id)) {
|
||||||
|
console.log("Avoid deadlock...", id, requestSequence, requestInfo.requestSequence );
|
||||||
|
return new AsyncReply(resource);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return requestInfo.reply;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (resource != null && !resource._p.suspended) {
|
else if (resource != null && !resource._p.suspended) {
|
||||||
|
|
||||||
@ -2973,11 +2981,12 @@ export default class DistributedConnection extends IStore {
|
|||||||
|
|
||||||
var reply = new AsyncReply();
|
var reply = new AsyncReply();
|
||||||
|
|
||||||
this.#resourceRequests.set(id, reply);
|
|
||||||
|
|
||||||
var newSequence =
|
var newSequence =
|
||||||
requestSequence != null ? [...requestSequence, id] : [id];
|
requestSequence != null ? [...requestSequence, id] : [id];
|
||||||
|
|
||||||
|
this.#resourceRequests.set(id, new DistributedResourceAttachRequestInfo(reply, newSequence));
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
this.#sendRequest(IIPPacketAction.AttachResource)
|
this.#sendRequest(IIPPacketAction.AttachResource)
|
||||||
|
11
src/Net/IIP/DistributedResourceAttachRequestInfo.js
Normal file
11
src/Net/IIP/DistributedResourceAttachRequestInfo.js
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
export default class DistributedResourceAttachRequestInfo
|
||||||
|
{
|
||||||
|
reply;
|
||||||
|
requestSequence;
|
||||||
|
|
||||||
|
constructor(reply, requestSequence){
|
||||||
|
this.reply = reply;
|
||||||
|
this.requestSequence = requestSequence;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user