Skip to content

Commit

Permalink
Introduced: blocking interface for Mailbox
Browse files Browse the repository at this point in the history
  • Loading branch information
pewsou committed Jun 3, 2022
1 parent ab74be2 commit f291a3d
Show file tree
Hide file tree
Showing 35 changed files with 897 additions and 545 deletions.
7 changes: 6 additions & 1 deletion src/ASFKAuthorizationMgr.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#import <Foundation/Foundation.h>
#import "ASFKMBSecret.h"
@interface ASFKAuthorizationMgr : NSObject{
@public ASFKSecretComparisonProc secretProcConfig;
@public ASFKSecretComparisonProc secretProcCreate;
@public ASFKSecretComparisonProc secretProcDiscard;
@public ASFKSecretComparisonProc secretProcRead;
Expand All @@ -26,7 +27,8 @@
@public ASFKSecretComparisonProc secretProcUnicast;
@public ASFKSecretComparisonProc secretProcMulticast;
@public ASFKSecretComparisonProc secretProcHost;
@public ASFKSecretComparisonProc secretProcConfig;
@public ASFKSecretComparisonProc secretProcIssuer;
@public ASFKSecretComparisonProc secretProcModerate;

}
@property (readonly) ASFKMasterSecret* masterSecret;
Expand All @@ -48,5 +50,8 @@
-(BOOL) matchHostSecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateSecret*)secOther;
-(BOOL) matchSecuritySecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateSecret*)secOther;
-(BOOL) matchConfigSecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateSecret*)secOther;
-(BOOL) matchIssuerSecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateSecret*)secOther;
-(BOOL) matchModeratorSecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateSecret*)secOther;


@end
55 changes: 52 additions & 3 deletions src/ASFKAuthorizationMgr.mm
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ -(id)init{
return YES;
}
};

secretProcRead=^BOOL(ASFKSecret* sec0,ASFKSecret* sec1){
if(sec0 && sec1){
return [sec1 matchesReaderSecret:sec0];
Expand Down Expand Up @@ -103,7 +103,6 @@ -(id)init{
return YES;
}
};

secretProcConfig=^BOOL(ASFKSecret* sec0,ASFKSecret* sec1){
if(sec0 && sec1){
return [sec1 matchesConfigSecret:sec0];
Expand All @@ -127,6 +126,30 @@ -(id)init{
}

};
secretProcIssuer=^BOOL(ASFKSecret* sec0,ASFKSecret* sec1){
if(sec0 && sec1){
return [sec1 matchesIssuerSecret:sec0];
}
else if(sec0 || sec1){
return NO;
}
else{
return YES;
}

};
secretProcModerate=^BOOL(ASFKSecret* sec0,ASFKSecret* sec1){
if(sec0 && sec1){
return [sec1 matchesModeratorSecret:sec0];
}
else if(sec0 || sec1){
return NO;
}
else{
return YES;
}
};


}
return self;
Expand All @@ -137,16 +160,20 @@ -(BOOL) setMasterSecret:(ASFKMasterSecret*)oldsec newSecret:(ASFKMasterSecret*)n
if(newsec!=nil){
//test validity of new secret
if([newsec validSecretSecurity]){

_masterSecret=newsec;
masterSecretBack=nil;

ASFKLog(@"DONE");
return YES;
}
return NO;
}
else{

_masterSecret=newsec;
masterSecretBack=nil;

return YES;
}
}
Expand All @@ -157,17 +184,21 @@ -(BOOL) setMasterSecret:(ASFKMasterSecret*)oldsec newSecret:(ASFKMasterSecret*)n
[self isMasterSecretValid:oldsec matcher:secretProcSecurity]){
if(newsec!=nil){
if([newsec validSecretSecurity]){

[_masterSecret invalidateAll];
_masterSecret=newsec;
masterSecretBack=nil;

ASFKLog(@"DONE");
return YES;
}
return NO;
}
else{

[_masterSecret invalidateAll];
_masterSecret=newsec;

ASFKLog(@"DONE");
return YES;
}
Expand Down Expand Up @@ -250,7 +281,6 @@ -(BOOL) matchMulticasterSecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateS
}
return NO;
}

-(BOOL) matchConfigSecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateSecret*)secOther{
if(secCurrent && secOther){
BOOL r1=secretProcConfig(secCurrent,secOther);
Expand All @@ -260,6 +290,25 @@ -(BOOL) matchConfigSecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateSecret
}
return NO;
}
-(BOOL) matchModeratorSecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateSecret*)secOther{
if(secCurrent && secOther){
BOOL r1=secretProcModerate(secCurrent,secOther);
return r1;
}else if(secCurrent==nil && secOther==nil){
return YES;
}
return NO;
}
-(BOOL) matchIssuerSecret:(ASFKPrivateSecret*)secCurrent with:(ASFKPrivateSecret*)secOther{
if(secCurrent && secOther){
BOOL r1=secretProcIssuer(secCurrent,secOther);
return r1;
}else if(secCurrent==nil && secOther==nil){
return YES;
}
return NO;
}

#pragma mark - Private methods
-(BOOL) isMasterSecretValid:(ASFKMasterSecret*)msecret matcher:(ASFKSecretComparisonProc)match{
if(_masterSecret && msecret){
Expand Down
3 changes: 1 addition & 2 deletions src/ASFKBase+Internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

//
// Copyright © 2019-2022 Boris Vigman. All rights reserved.
//

Expand All @@ -25,7 +25,6 @@
+(ASFK_IDENTITY_TYPE) generateIdentity;
+(NSString*) generateRandomString;
+(NSNumber*) generateRandomNumber;

-(BOOL) isCancellationRequested;
-(void) registerSession:(ASFKControlBlock*)cblk;
-(ASFKControlBlock*) newSession;
Expand Down
3 changes: 1 addition & 2 deletions src/ASFKBase+Internal.mm
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

// Copyright © 2019-2022 Boris Vigman. All rights reserved.
//

Expand Down Expand Up @@ -54,7 +53,7 @@ +(NSNumber*) generateRandomNumber{
}

-(BOOL) isCancellationRequested{

return NO;
}
-(ASFKControlBlock*) refreshCancellationData{
Expand Down
56 changes: 50 additions & 6 deletions src/ASFKBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,13 @@
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

// Copyright © 2019-2022 Boris Vigman. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "ASFKPrjConfig.h"

#define ASFK_VERSION @"0.2.1"
#define ASFK_VERSION @"0.2.2"
#define ASFK_IDENTITY_TYPE id

#ifdef __ASFK_VERBOSE_PRINTING__
Expand Down Expand Up @@ -64,14 +63,14 @@

#define kASFKReturnResult @"asfk_ret_result"
#define ASFK_RET_SUMRESULT @"asfk_ret_sumresult"

#define ASFK_RET_NEXT_TARGET @"asfk_ret_nextTarget"
#define kASFKReturnSessionId @"asfk_ret_sessionId"
#define kASFKReturnDescription @"asfk_ret_description"

#define kASFKReturnStatsTimeProcsElapsedSec @"asfk_ret_stats_procs_tesec"
#define kASFKReturnStatsTimeSessionElapsedSec @"asfk_ret_stats_session_tesec"


#define kASFKProgressRoutine @"progress_proc"
#define kASFKCancelRoutine @"cancel_proc"
#define kASFKSummaryRoutine @"summary_proc"
Expand Down Expand Up @@ -151,11 +150,13 @@ typedef id ( ^ASFKProgressRoutine)(NSUInteger stage,NSUInteger accomplished ,NSU
@end

@interface ASFKControlBlock : NSObject<ASFKControlStarter,ASFKControlCallback>{

@protected std::atomic<NSUInteger> itsResPosition;
@protected NSUInteger totalProcessors;
@protected NSLock* itsLock;;
@protected ASFKProgressRoutine itsProgressProc;
@protected std::atomic<NSUInteger> indexSecondary;

@public std::atomic< BOOL> flushed;
@public std::atomic< BOOL> paused;
}
Expand All @@ -175,7 +176,6 @@ typedef id ( ^ASFKExecutableRoutine)(id<ASFKControlCallback> controlBlock, id da
typedef id ( ^ASFKExecutableRoutineSummary)(id<ASFKControlCallback> controlBlock,NSDictionary* stats,id data);
typedef id ( ^ASFKCancellationRoutine)(id identity);


/**
@param controlBlock object controlling the execution
@param index positive number of current iteration
Expand Down Expand Up @@ -228,7 +228,6 @@ typedef BOOL ( ^ASFKExecutableRoutineLoopConditional)(id<ASFKControlCallback> c
@protected double totalSessionsTime;
@protected ASFKProgressRoutine progressProc;
@protected NSMutableDictionary* priv_statistics;
@protected dispatch_semaphore_t semHighLevelCall;
}
@property (readonly) NSString* itsName;
@property (readonly) double totalTimeSeconds;
Expand Down Expand Up @@ -276,6 +275,7 @@ typedef BOOL ( ^ASFKExecutableRoutineLoopConditional)(id<ASFKControlCallback> c
}
@end

#import "ASFKNonlinearFlow.h"
#import "ASFKLinearFlow.h"
@interface ASFKQueue : ASFKLinearFlow{
@protected NSLock* lock;
Expand All @@ -298,11 +298,55 @@ typedef BOOL ( ^ASFKExecutableRoutineLoopConditional)(id<ASFKControlCallback> c
-(void) unoccupy;
@end

typedef enum enumASFKPipelineExecutionStatus{
eASFK_ES_HAS_MORE=0,
eASFK_ES_HAS_NONE,
eASFK_ES_WAS_CANCELLED,
eASFK_ES_SKIPPED_MAINT
} eASFKThreadpoolExecutionStatus;

@interface ASFKThreadpoolSession : ASFKBase{
@public ASFKControlBlock* cblk;
@protected ASFKExecutableRoutineSummary passSummary;
@protected ASFKExecutableRoutineSummary expirationSummary;
@protected ASFKCancellationRoutine cancellationHandler;
@protected NSMutableArray<ASFKExecutableRoutine>* procs;
@protected ASFKExpirationCondition* excond;
@public std::atomic<BOOL> isStopped;
@public std::atomic<BOOL> paused;
}
@property ASFK_IDENTITY_TYPE sessionId;

-(ASFKControlBlock*) getControlBlock;
-(id)initWithSessionId:(ASFK_IDENTITY_TYPE)sessionId andSubsessionId:(ASFK_IDENTITY_TYPE)subId;
-(void) flush;
-(void) cancel;
-(void) postDataItemsAsArray:(NSArray*)array;
-(void) postDataItemsAsOrderedSet:(NSOrderedSet*)set;
-(void) postDataItemsAsUnorderedSet:(NSSet*)set;
-(void) postDataItemsAsDictionary:(NSDictionary*)dict;
-(void) postDataItem:(id)dataItem;
-(void) addRoutinesFromArray:(NSArray<ASFKExecutableRoutine>*)procs;
-(void) replaceRoutinesWithArray:(NSArray<ASFKExecutableRoutine>*)procs;
-(void) setProgressRoutine:(ASFKProgressRoutine)progress;
-(void) setSummary:(ASFKExecutableRoutineSummary)sum;
-(void) setExpirationSummary:(ASFKExecutableRoutineSummary)sum;
-(eASFKThreadpoolExecutionStatus) select:(long)selector routineCancel:(ASFKCancellationRoutine)cancel;
-(void) setCancellationHandler:(ASFKCancellationRoutine)cru;
-(void) setExpirationCondition:(ASFKExpirationCondition*) trop;
-(BOOL) hasSessionSummary;

-(BOOL) isBusy;

-(long) procsCount;
-(long) itemsCount;

@end

#import "ASFKFilter.h"
#import "ASFKFilteringQueue.h"
#import "ASFKMailbox.h"
#import "ASFKPipelinePar.h"




Loading

0 comments on commit f291a3d

Please sign in to comment.