[Vm-dev] VM Maker: VMMaker-dtl.336.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Jan 10 22:23:14 UTC 2014


David T. Lewis uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker-dtl.336.mcz

==================== Summary ====================

Name: VMMaker-dtl.336
Author: dtl
Time: 10 January 2014, 5:12:52.298 pm
UUID: acf7f659-bb1c-451c-8069-276bbc587bd2
Ancestors: VMMaker-tpr.335

Add SqueakSSLPlugin to VMMaker.

SqueakSSLPlugin is a platform SSL interface for Squeak by Andreas Raab.

The original source repository is at http://www.squeaksource.com/SqueakSSL. This is the original source from SqueakSSL-Plugin-ar.3 with category changed to VMMaker-Plugins.

License: This project is covered by the MIT License:

Copyright (c) 2010 Andreas Raab and Contributors

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

=============== Diff against VMMaker-tpr.335 ===============

Item was added:
+ InterpreterPlugin subclass: #SqueakSSLPlugin
+ 	instanceVariableNames: ''
+ 	classVariableNames: ''
+ 	poolDictionaries: ''
+ 	category: 'VMMaker-Plugins'!

Item was added:
+ ----- Method: SqueakSSLPlugin class>>hasHeaderFile (in category 'translation') -----
+ hasHeaderFile
+ 	^true!

Item was added:
+ ----- Method: SqueakSSLPlugin class>>moduleName (in category 'translation') -----
+ moduleName
+ 	^'SqueakSSL'!

Item was added:
+ ----- Method: SqueakSSLPlugin>>primitiveAccept (in category 'primitives') -----
+ primitiveAccept
+ 	"Primitive. Starts or continues a server handshake using the current session.
+ 	Will eventually produce output to be sent to the client. Requires the host
+ 	and cert name to be set for the session. Returns a code indicating the sate
+ 	of the connection:
+ 		> 0	 - Number of bytes to be sent to the client.
+ 		0	 - Success. The connection is established.
+ 		-1 	 - More input is required.
+ 		< -1 - Other errors.
+ 	"
+ 	| start srcLen dstLen srcOop dstOop handle srcPtr dstPtr result |
+ 	self var: #srcPtr type: 'char *'.
+ 	self var: #dstPtr type: 'char *'.
+ 	self export: true.
+ 	interpreterProxy methodArgumentCount = 5
+ 		ifFalse:[^interpreterProxy primitiveFail].
+ 	dstOop := interpreterProxy stackObjectValue: 0.
+ 	srcLen := interpreterProxy stackIntegerValue: 1.
+ 	start := interpreterProxy stackIntegerValue: 2.
+ 	srcOop := interpreterProxy stackObjectValue: 3.
+ 	handle := interpreterProxy stackIntegerValue: 4.
+ 	interpreterProxy failed ifTrue:[^nil].
+ 	((start > 0 and:[srcLen >= 0])
+ 		and:[(interpreterProxy isBytes: srcOop) 
+ 		and:[(interpreterProxy isBytes: dstOop) 
+ 		and:[(interpreterProxy byteSizeOf: srcOop) >= (start + srcLen - 1)]]])
+ 			ifFalse:[^interpreterProxy primitiveFail].
+ 	srcPtr := interpreterProxy firstIndexableField: srcOop.
+ 	dstPtr := interpreterProxy firstIndexableField: dstOop.
+ 	srcPtr := srcPtr + start - 1.
+ 	dstLen := interpreterProxy byteSizeOf: dstOop.
+ 	result := self cCode: 'sqAcceptSSL(handle, srcPtr, srcLen, dstPtr, dstLen)' 
+ 					inSmalltalk:[handle. srcPtr. srcLen. dstPtr. dstLen. -2].
+ 	interpreterProxy failed ifTrue:[^nil].
+ 	interpreterProxy pop: interpreterProxy methodArgumentCount+1.
+ 	interpreterProxy pushInteger: result.!

Item was added:
+ ----- Method: SqueakSSLPlugin>>primitiveConnect (in category 'primitives') -----
+ primitiveConnect
+ 	"Primitive. Starts or continues a client handshake using the provided data.
+ 	Will eventually produce output to be sent to the server. Requires the host
+ 	name to be set for the session. 
+ 	Returns:
+ 		> 0	 - Number of bytes to be sent to the server
+ 		0	 - Success. The connection is established.
+ 		-1 	 - More input is required.
+ 		< -1 - Other errors.
+ 	"
+ 	| start srcLen dstLen srcOop dstOop handle srcPtr dstPtr result |
+ 	self var: #srcPtr type: 'char *'.
+ 	self var: #dstPtr type: 'char *'.
+ 	self export: true.
+ 	interpreterProxy methodArgumentCount = 5
+ 		ifFalse:[^interpreterProxy primitiveFail].
+ 	dstOop := interpreterProxy stackObjectValue: 0.
+ 	srcLen := interpreterProxy stackIntegerValue: 1.
+ 	start := interpreterProxy stackIntegerValue: 2.
+ 	srcOop := interpreterProxy stackObjectValue: 3.
+ 	handle := interpreterProxy stackIntegerValue: 4.
+ 	interpreterProxy failed ifTrue:[^nil].
+ 	((start > 0 and:[srcLen >= 0])
+ 		and:[(interpreterProxy isBytes: srcOop) 
+ 		and:[(interpreterProxy isBytes: dstOop) 
+ 		and:[(interpreterProxy byteSizeOf: srcOop) >= (start + srcLen - 1)]]])
+ 			ifFalse:[^interpreterProxy primitiveFail].
+ 	srcPtr := interpreterProxy firstIndexableField: srcOop.
+ 	dstPtr := interpreterProxy firstIndexableField: dstOop.
+ 	srcPtr := srcPtr + start - 1.
+ 	dstLen := interpreterProxy byteSizeOf: dstOop.
+ 	result := self cCode: 'sqConnectSSL(handle, srcPtr, srcLen, dstPtr, dstLen)' 
+ 					inSmalltalk:[handle. srcPtr. srcLen. dstPtr. dstLen. -2].
+ 	interpreterProxy failed ifTrue:[^nil].
+ 	interpreterProxy pop: interpreterProxy methodArgumentCount+1.
+ 	interpreterProxy pushInteger: result.!

Item was added:
+ ----- Method: SqueakSSLPlugin>>primitiveCreate (in category 'primitives') -----
+ primitiveCreate
+ 	"Primitive. Creates a new SSL session and returns its handle."
+ 	| handle |
+ 	self export: true.
+ 	interpreterProxy methodArgumentCount = 0 
+ 		ifFalse:[^interpreterProxy primitiveFail].
+ 	handle := self cCode: 'sqCreateSSL()' inSmalltalk:[0].
+ 	handle = 0 ifTrue:[^interpreterProxy primitiveFail].
+ 	interpreterProxy pop: interpreterProxy methodArgumentCount+1.
+ 	interpreterProxy pushInteger: handle.
+ !

Item was added:
+ ----- Method: SqueakSSLPlugin>>primitiveDecrypt (in category 'primitives') -----
+ primitiveDecrypt
+ 	"Primitive. Decrypts a buffer sent via the connection.
+ 	Requires the session to be established.
+ 	Returns:
+ 		>=0 - Number of bytes decrypted in the result buffer
+ 		< -1 - Other errors.
+ 	"
+ 	| start srcLen dstLen srcOop dstOop handle srcPtr dstPtr result |
+ 	self var: #srcPtr type: 'char *'.
+ 	self var: #dstPtr type: 'char *'.
+ 	self export: true.
+ 	interpreterProxy methodArgumentCount = 5
+ 		ifFalse:[^interpreterProxy primitiveFail].
+ 	dstOop := interpreterProxy stackObjectValue: 0.
+ 	srcLen := interpreterProxy stackIntegerValue: 1.
+ 	start := interpreterProxy stackIntegerValue: 2.
+ 	srcOop := interpreterProxy stackObjectValue: 3.
+ 	handle := interpreterProxy stackIntegerValue: 4.
+ 	interpreterProxy failed ifTrue:[^nil].
+ 	((start > 0 and:[srcLen >= 0])
+ 		and:[(interpreterProxy isBytes: srcOop) 
+ 		and:[(interpreterProxy isBytes: dstOop) 
+ 		and:[(interpreterProxy byteSizeOf: srcOop) >= (start + srcLen - 1)]]])
+ 			ifFalse:[^interpreterProxy primitiveFail].
+ 	srcPtr := interpreterProxy firstIndexableField: srcOop.
+ 	dstPtr := interpreterProxy firstIndexableField: dstOop.
+ 	srcPtr := srcPtr + start - 1.
+ 	dstLen := interpreterProxy byteSizeOf: dstOop.
+ 	result := self cCode: 'sqDecryptSSL(handle, srcPtr, srcLen, dstPtr, dstLen)' 
+ 					inSmalltalk:[handle. srcPtr. srcLen. dstPtr. dstLen. -2].
+ 	interpreterProxy failed ifTrue:[^nil].
+ 	interpreterProxy pop: interpreterProxy methodArgumentCount+1.
+ 	interpreterProxy pushInteger: result.!

Item was added:
+ ----- Method: SqueakSSLPlugin>>primitiveDestroy (in category 'primitives') -----
+ primitiveDestroy
+ 	"Primitive. Destroys an SSL session."
+ 
+ 	| handle result |
+ 	self export: true.
+ 	interpreterProxy methodArgumentCount = 1
+ 		ifFalse:[^interpreterProxy primitiveFail].
+ 	handle := interpreterProxy stackIntegerValue: 0.
+ 	interpreterProxy failed ifTrue:[^nil].
+ 	result := self cCode: 'sqDestroySSL(handle)' inSmalltalk:[handle. 0].
+ 	result = 0 ifTrue:[^interpreterProxy primitiveFail].
+ 	interpreterProxy pop: interpreterProxy methodArgumentCount.
+ 
+ !

Item was added:
+ ----- Method: SqueakSSLPlugin>>primitiveEncrypt (in category 'primitives') -----
+ primitiveEncrypt
+ 	"Primitive. Encrypts a buffer to be sent to the via the connection.
+ 	Requires the session to be established.
+ 	Returns:
+ 		>=0 - Number of bytes encrypted in the result buffer
+ 		< -1 - Other errors.
+ 	"
+ 	| start srcLen dstLen srcOop dstOop handle srcPtr dstPtr result |
+ 	self var: #srcPtr type: 'char *'.
+ 	self var: #dstPtr type: 'char *'.
+ 	self export: true.
+ 	interpreterProxy methodArgumentCount = 5
+ 		ifFalse:[^interpreterProxy primitiveFail].
+ 	dstOop := interpreterProxy stackObjectValue: 0.
+ 	srcLen := interpreterProxy stackIntegerValue: 1.
+ 	start := interpreterProxy stackIntegerValue: 2.
+ 	srcOop := interpreterProxy stackObjectValue: 3.
+ 	handle := interpreterProxy stackIntegerValue: 4.
+ 	interpreterProxy failed ifTrue:[^nil].
+ 	((start > 0 and:[srcLen >= 0])
+ 		and:[(interpreterProxy isBytes: srcOop) 
+ 		and:[(interpreterProxy isBytes: dstOop) 
+ 		and:[(interpreterProxy byteSizeOf: srcOop) >= (start + srcLen - 1)]]])
+ 			ifFalse:[^interpreterProxy primitiveFail].
+ 	srcPtr := interpreterProxy firstIndexableField: srcOop.
+ 	dstPtr := interpreterProxy firstIndexableField: dstOop.
+ 	srcPtr := srcPtr + start - 1.
+ 	dstLen := interpreterProxy byteSizeOf: dstOop.
+ 	result := self cCode: 'sqEncryptSSL(handle, srcPtr, srcLen, dstPtr, dstLen)' 
+ 					inSmalltalk:[handle. srcPtr. srcLen. dstPtr. dstLen. -2].
+ 	interpreterProxy failed ifTrue:[^nil].
+ 	interpreterProxy pop: interpreterProxy methodArgumentCount+1.
+ 	interpreterProxy pushInteger: result.!

Item was added:
+ ----- Method: SqueakSSLPlugin>>primitiveGetIntProperty (in category 'primitives') -----
+ primitiveGetIntProperty
+ 	"Primitive. Returns an integer property for the session"
+ 
+ 	| propID handle value |
+ 	self export: true.
+ 	interpreterProxy methodArgumentCount = 2
+ 		ifFalse:[^interpreterProxy primitiveFail].
+ 	propID := interpreterProxy stackIntegerValue: 0.
+ 	handle := interpreterProxy stackIntegerValue: 1.
+ 	interpreterProxy failed ifTrue:[^nil].
+ 	value := self cCode: 'sqGetIntPropertySSL(handle, propID)' 
+ 					inSmalltalk:[handle. propID. 0].
+ 	interpreterProxy failed ifTrue:[^nil].
+ 	interpreterProxy 
+ 		pop: interpreterProxy methodArgumentCount + 1
+ 		thenPush: (interpreterProxy signed32BitIntegerFor: value)
+ !

Item was added:
+ ----- Method: SqueakSSLPlugin>>primitiveGetStringProperty (in category 'primitives') -----
+ primitiveGetStringProperty
+ 	"Primitive. Returns a string property for the session"
+ 
+ 	| stringLen stringOop propID handle stringPtr oopPtr |
+ 	self var: #stringPtr type: 'char *'.
+ 	self var: #oopPtr type: 'char *'.
+ 	self export: true.
+ 	interpreterProxy methodArgumentCount = 2
+ 		ifFalse:[^interpreterProxy primitiveFail].
+ 	propID := interpreterProxy stackIntegerValue: 0.
+ 	handle := interpreterProxy stackIntegerValue: 1.
+ 	interpreterProxy failed ifTrue:[^nil].
+ 	stringPtr := self cCode: 'sqGetStringPropertySSL(handle, propID)' 
+ 					inSmalltalk:[handle. propID. nil].
+ 	interpreterProxy failed ifTrue:[^nil].
+ 	stringPtr == nil ifTrue:[
+ 		stringOop := interpreterProxy nilObject.
+ 	] ifFalse:[
+ 		stringLen := self strlen: stringPtr.
+ 		stringOop := interpreterProxy 
+ 			instantiateClass: (interpreterProxy classString)
+ 			indexableSize: stringLen.
+ 		oopPtr := interpreterProxy firstIndexableField: stringOop.
+ 		0 to: stringLen-1 do:[:i| oopPtr at: i put: (stringPtr at: i)].
+ 	].
+ 	interpreterProxy 
+ 		pop: interpreterProxy methodArgumentCount + 1
+ 		thenPush: stringOop.
+ !

Item was added:
+ ----- Method: SqueakSSLPlugin>>primitiveSetIntProperty (in category 'primitives') -----
+ primitiveSetIntProperty
+ 	"Primitive. Sets a integer property for the session"
+ 
+ 	| propID handle result value |
+ 	self export: true.
+ 	interpreterProxy methodArgumentCount = 3
+ 		ifFalse:[^interpreterProxy primitiveFail].
+ 	value := interpreterProxy signed32BitValueOf: (interpreterProxy stackValue: 0).
+ 	propID := interpreterProxy stackIntegerValue: 1.
+ 	handle := interpreterProxy stackIntegerValue: 2.
+ 	interpreterProxy failed ifTrue:[^nil].
+ 	result := self cCode: 'sqSetIntPropertySSL(handle, propID, value)' 
+ 					inSmalltalk:[handle. propID. value. false].
+ 	result ifFalse:[^interpreterProxy primitiveFail].
+ 	interpreterProxy failed ifTrue:[^nil].
+ 	interpreterProxy pop: interpreterProxy methodArgumentCount.
+ !

Item was added:
+ ----- Method: SqueakSSLPlugin>>primitiveSetStringProperty (in category 'primitives') -----
+ primitiveSetStringProperty
+ 	"Primitive. Sets a string property for the session"
+ 
+ 	| srcLen srcOop propID handle srcPtr result |
+ 	self var: #srcPtr type: 'char *'.
+ 	self export: true.
+ 	interpreterProxy methodArgumentCount = 3
+ 		ifFalse:[^interpreterProxy primitiveFail].
+ 	srcOop := interpreterProxy stackObjectValue: 0.
+ 	propID := interpreterProxy stackIntegerValue: 1.
+ 	handle := interpreterProxy stackIntegerValue: 2.
+ 	interpreterProxy failed ifTrue:[^nil].
+ 	(interpreterProxy isBytes: srcOop) 
+ 		ifFalse:[^interpreterProxy primitiveFail].
+ 	srcPtr := interpreterProxy firstIndexableField: srcOop.
+ 	srcLen := interpreterProxy byteSizeOf: srcOop.
+ 	result := self cCode: 'sqSetStringPropertySSL(handle, propID, srcPtr, srcLen)' 
+ 					inSmalltalk:[handle. srcPtr. propID. srcLen. false].
+ 	result ifFalse:[^interpreterProxy primitiveFail].
+ 	interpreterProxy failed ifTrue:[^nil].
+ 	interpreterProxy pop: interpreterProxy methodArgumentCount.
+ !



More information about the Vm-dev mailing list